1. Нужно убедиться что сайт корректно обрабатывает GET параметры и настроить композит, чтобы при вызове страницы с параметрами не создавался новый кэш. 2. Отредактировать js код шаблона компонента catalog.element , так чтобы при задании параметра (в примере pid) выбирался правильный SKU.
В стандартном шаблоне за выбор начального SKU отвечает функция SetCurrent. Кастомим её:
Код
window.JCCatalogElement.prototype.SetCurrent = function()
{
var i = 0,
j = 0,
strName = '',
arShowValues = false,
arCanBuyValues = [],
arFilter = {},
tmpFilter = [],
current = this.offers[this.offerNum].TREE,
//CUSTOM START
paramsUrl = window.location.search,
pidRegExp = new RegExp(/[?&]pid=(\d+)/),
pid = pidRegExp.exec(paramsUrl);
if (pid && pid[1]) {
for (i = 0; i < this.offers.length; i++)
{
if (this.offers[i].ID == pid[1]) {
current = this.offers[i].TREE;
}
}
}
//CUSTOM END
...
3. Редактируем скрипт выгрузки каталога для Яндекса. Yandex_run.php Меняем редактируем строку 1530. Добавляем параметр pid.
Кирилл, спасибо за решение. Проверено на модуле Интернет-магазин (sale) 14.11.9 с комплексным компонентом "catalog"- все работает! Проблема вашим методом решается идеально, а самое главное красиво!
Кирилл, спасибо за решение. Проверено на модуле Интернет-магазин (sale) 14.11.9 с комплексным компонентом "catalog"- все работает! Проблема вашим методом решается идеально, а самое главное красиво!
Если кому надо помочь с реализацией, стучитесь.
Виталий, стучусь! Не понимаю где и как писать - в программировании ноль. Научите, куда вносить коды, которые написал Кирилл.
1. Нужно убедиться что сайт корректно обрабатывает GET параметры и настроить композит, чтобы при вызове страницы с параметрами не создавался новый кэш. 2. Отредактировать js код шаблона компонента catalog.element , так чтобы при задании параметра (в примере pid) выбирался правильный SKU.
В стандартном шаблоне за выбор начального SKU отвечает функция SetCurrent. Кастомим её:
Код
window.JCCatalogElement.prototype.SetCurrent = function()
{
var i = 0,
j = 0,
strName = '',
arShowValues = false,
arCanBuyValues = [],
arFilter = {},
tmpFilter = [],
current = this.offers[this.offerNum].TREE,
//CUSTOM START
paramsUrl = window.location.search,
pidRegExp = new RegExp(/[?&]pid=(\d+)/),
pid = pidRegExp.exec(paramsUrl);
if (pid && pid[1]) {
for (i = 0; i < this.offers.length; i++)
{
if (this.offers[i].ID == pid[1]) {
current = this.offers[i].TREE;
}
}
}
//CUSTOM END
...
3. Редактируем скрипт выгрузки каталога для Яндекса. Yandex_run.php Меняем редактируем строку 1530. Добавляем параметр pid.
1. Нужно убедиться что сайт корректно обрабатывает GET параметры и настроить композит, чтобы при вызове страницы с параметрами не создавался новый кэш. 2. Отредактировать js код шаблона компонента catalog.element , так чтобы при задании параметра (в примере pid) выбирался правильный SKU.
В стандартном шаблоне за выбор начального SKU отвечает функция SetCurrent. Кастомим её:
Код
window.JCCatalogElement.prototype.SetCurrent = function()
{
var i = 0,
j = 0,
strName = '',
arShowValues = false,
arCanBuyValues = [],
arFilter = {},
tmpFilter = [],
current = this.offers[this.offerNum].TREE,
//CUSTOM START
paramsUrl = window.location.search,
pidRegExp = new RegExp(/[?&]pid=(\d+)/),
pid = pidRegExp.exec(paramsUrl);
if (pid && pid[1]) {
for (i = 0; i < this.offers.length; i++)
{
if (this.offers[i].ID == pid[1]) {
current = this.offers[i].TREE;
}
}
}
//CUSTOM END
...
3. Редактируем скрипт выгрузки каталога для Яндекса. Yandex_run.php Меняем редактируем строку 1530. Добавляем параметр pid.
Тестировал на сайте с включенным ЧПУ и Композитом.
Теперь хотелось бы узнать понравится ли такое решению Яндексу).
Добрый день! Прошу помощи, как это реализовать. Пошагово, новичёк - не могу разобраться. Застрял сразу же - на поиске файла с кодом. Нашёл в сети, что они должны быть по пути:
Я скопировал шаблон кампонента, через административный раздел сайта - лицевая панель сайт -> шестеренка -> каталог -> копировать шаблон компонента. Но в итоге, по пути как сверху, у меня нужных файлов нет. Есть catalog.section, а каталог-элемент отсутствует. Стандартная редакция магазина.
Евгений Опарин, вывод каталога может быть реализован с помощью простых компонентов или комплексных. Здесь речь идет о комплексном. В составе комплексного компонента есть простые, которые подгружаются по логике движка. В составе каждого простого компонента есть шаблон битрикса или скопированный шаблон вашего окружения. Скрипт, который отвечает за вывод элемента каталога загружается вместе с выбранным шаблоном и лежит в той же папке, что и шаблон. Вам нужно понять какой шаблон вы используете и куда вы его скопировали, затем найти нужный JS скрипт в папке скопированного шаблона и отредактировать его согласно вышеизложенной инструкции. Кроме этого необходимо поправить скрипт формирования XML выгрузки для яндекса, чтобы он правильно формировал уникальные урлы для каждого SKU.
Виталий Cакович написал: Евгений Опарин , вывод каталога может быть реализован с помощью простых компонентов или комплексных. Здесь речь идет о комплексном. В составе комплексного компонента есть простые, которые подгружаются по логике движка. В составе каждого простого компонента есть шаблон битрикса или скопированный шаблон вашего окружения. Скрипт, который отвечает за вывод элемента каталога загружается вместе с выбранным шаблоном и лежит в той же папке, что и шаблон. Вам нужно понять какой шаблон вы используете и куда вы его скопировали, затем найти нужный JS скрипт в папке скопированного шаблона и отредактировать его согласно вышеизложенной инструкции. Кроме этого необходимо поправить скрипт формирования XML выгрузки для яндекса, чтобы он правильно формировал уникальные урлы для каждого SKU.
Помогите мне разобраться, все сделал кроме редактирования Yandex_run.php, у меня строки отличаются и выглядят так $strOfferYandex .= "<url>".$usedProtocol.$ar_iblock['SERVER_NAME'].htmlspecialcharsbx($arOfferItem["~DETAIL_PAGE_URL"]).(strstr($arOfferItem['DETAIL_PAGE_URL'], '?') === false ? '?' : '&')."r1=<?echo \$strReferer1; ?>&r2=<?echo \$strReferer2; ?></url>\n"; Пробовал вставить &pid=". $arOfferItem["ID"] . " выдает ошибку что не хватает ; если целиком строчку вставить то вообще не грузится.