Изменение ссылок на товары в Корзине HostCMS v6

#
Изменение ссылок на товары в Корзине HostCMS v6
В процессе работы с HostCMS у меня возникала куча вопросов, так как пару лет назад я был хорошо знаком лишь с html. И практически для всех задач я смог найти решения на данном форуме. Это мой небольшой вклад в общую базу знаний по движку.

В какой-то момент возникла необходимость получать ссылки на товары вида mysite.ru/tovar , то есть избежать лишних подразделов в обычном виде: mysite.ru/shop/category/tovar . При этом страницы (карточки) товаров в классическом виде и вывод списка товаров на странице mysite.ru/shop были не нужны. Задача специфическая, но чего только в голову не взбредет в процессе разработки.

В XSL МагазинКорзина и МагазинКорзинаКраткая эти ссылки формируются так:
<a href="{url}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>

где {url} и есть ссылка на товар вида /shop/category/tovar (category - если она есть)

При этом, при создании карточки товара внутри Центра Администрирования вы можете указать "Путь" для товара. Если не укажите, автоматически получите цифровой идентификатор. Вопрос был в том, под каким свойством записывается этот параметр в таблицы. Просмотрев MySQL и поискав нужную строчку я выяснил что адресу товара (именно страница, а не вся ссылка) соответствует параметр path.

Таким образом формирование ссылки в XSL файле должно выглядеть так:
<a href="{path}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>


Однако, это не сработало как нужно и пришлось дописать имя домена:
<a href="http://mysite.ru/{path}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>

В итоге все заработало и в XSL МагазинКорзинаКраткая, и в XSL МагазинКорзина

P.S.
Правда, в процессе была странная ошибка. При добавлении товара в Корзину все работало: товар добавлялся в корзину с помощью ajax (без обновления страницы)  и отображалась нужная ссылка в списке товаров выезжающей плашки краткой корзины. Но после обновления страницы (или при переходе на другую) ссылки принимали прежний вид. Сначала я этого не заметил и думал что {path} по какой-то причине не работает, а потом выяснилось следующее. С самого начала, чтобы была возможность "откатиться" я не редактировал имеющийся XSL шаблон, а делал копию типа МагазинКорзинаКраткаяMySite и подключал ее к Типовой Динамической Странице в Структуре Сайта. В процессе работы я делал так несколько раз и по какой-то причине в итоге в файле templates\templateNN\template.htm не перезаписалась строчка:
               // Краткая корзина
               $Shop_Cart_Controller_Show = new Shop_Cart_Controller_Show(
                  Core_Entity::factory('Shop', 3)
               );
               $Shop_Cart_Controller_Show
                  ->xsl(
                     Core_Entity::factory('Xsl')->getByName('МагазинКорзинаКраткаяMySite01')
                  )
                  ->couponText(isset($_SESSION) ? Core_Array::get($_SESSION, 'coupon_text') : '')
                  ->itemsPropertiesList(FALSE)
                  ->show();

при том что текущая версия была условно МагазинКорзинаКраткаяMySite02, и она отображалась в настройках ТДС, и к ней обращался ajax добавления товара в краткую корзину без перезагрузки страницы. Выяснилось это, когда я начал "раскрашивать" ссылки параметром style="color" в разных версиях XSL. Такой примитивный прием часто помогает понять что, откуда и как грузится =)

Исправить эту строчку можно просто отредактировав Макет страницы в ЦА. Скорее всего я просто закрутился с XSL, а эта строчка и не должна была никаким образом обновляться. В общем, нужно быть внимательнее к деталям.

Задача в целом несложная, но надеюсь эта информация поможет кому-то сэкономить пару лишних часов при работе с HostCMS )
#
Re: Изменение ссылок на товары в Корзине HostCMS v6
tony_k,
Прошу прощения, а что вы сделали?
Поменяли путь только в XSL?
Каким образом система узнает что по адресу mysite.ru/tovar она должна найти товар?
HostDev.pw - модули для HostCMS, Telegram: @hostdev
#
Re: Изменение ссылок на товары в Корзине HostCMS v6
тоже не понял
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Изменение ссылок на товары в Корзине HostCMS v6
EugenyP писал(а):
Каким образом система узнает что по адресу mysite.ru/tovar она должна найти товар?

Она и не должна. Я сразу написал - задача специфическая. Условно - на сайте представлено всего несколько товаров (до 10) и каждый должен иметь отдельную страницу с уникальным дизайном полностью отличным от обычного вида карточки товара. Зачем адаптировать имеющуюся страницу товара если от нее допустим нужна только кнопка "Купить" и цена при помещении в корзину. Поэтому страницы для них были созданы отдельно. Карточки товара в этой схеме не задействованы. Только данные о товаре из MySQL: название, цена, путь.

Отдельный способ применения для такой схемы - каталог услуг к примеру. При этом страницу mysite.ru/shop можно адаптировать под прайс со списком этих услуг. И так же переписать ссылки на эти услуги.

При этом, для простоты администрирования в ЦА сами товары или услуги останутся отсортированными по каталогам.

Надеюсь макимально подробно объяснил для чего была произведена подобная подмена.
#
Re: Изменение ссылок на товары в Корзине HostCMS v6
tony_k,
если у вас товар в ЦА лежит по пути mysite.ru/shop/category/tovar

то вы хоть заоткрывайтесь по пути mysite.ru/tovar у вас будет просто ошибка 404, конечно, если Вы не создали статичную страницу с url tovar и не показываете на ней данные этого товара, ну или как то обрабатываете пути скриптом

так что я все еще не догоняю что Вы сделали, можно на живом примере?
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Изменение ссылок на товары в Корзине HostCMS v6
alexpimnev писал(а):
конечно, если Вы не создали статичную страницу с url tovar

Все верно!) Как я и написал в пояснении, страницы для товаров созданы отдельно (вручную так сказать). И они размещены по адресу mysite.ru/tovar . Получается вроде как одностраничники под каждый товар или услугу.

Понимаю что выглядит странно, но такая была задача
Авторизация