В процессе работы с 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 )