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"] . " выдает ошибку что не хватает ; если целиком строчку вставить то вообще не грузится.
Евгений Опарин, может вам и все понятно, но мне ничего))) сравнил вашу и свою строчку, с пробелами все совпадает кроме начала "<url>".$usedProtocol.$ar_iblock "<url>http://".$ar_iblock если подставить http:// выгрузка проходит, если в конец добавить &pid=". $arOfferItem["ID"] . " то ошибка.
Евгений Вальтер написал: Евгений Опарин , не понял о чем вы) Пробелы убирал, тоже самое
В XML коде при формировании все специальные символы заменяем Мнемоническими сущностями. Например символ & == & и т.д. если реферы не используете в статистике можете вообще их убрать. По-моему Вам просто нужно правильно синтаксически сформировать строку.
А как сделать так, чтобы при переходе между торговыми предложениями внутри карточки товара, менялся и url? Т.е., например, /product/?pid=23 для белого цвета, /product/?pid=24 - для черного, При клике на черный- менять pid=23 на pid=24?
Юрий Огневин написал: А как сделать так, чтобы при переходе между торговыми предложениями внутри карточки товара, менялся и url? Т.е., например, /product/?pid=23 для белого цвета, /product/?pid=24 - для черного, При клике на черный- менять pid=23 на pid=24?
Юрий, нашли способ? Тоже заинтересован в этом решении!
Юрий Огневин написал: А как сделать так, чтобы при переходе между торговыми предложениями внутри карточки товара, менялся и url? Т.е., например, /product/?pid=23 для белого цвета, /product/?pid=24 - для черного, При клике на черный- менять pid=23 на pid=24?
Юрий, нашли способ? Тоже заинтересован в этом решении!
Решил таким образом:
В window.JCCatalogElement.prototype.SelectOfferProp = function() в конец добавил
Код
loc = '?pid=' + this.offers[this.offerNum].ID;
history.pushState({}, '', loc);
Не знаю, насколько это корректно, но вроде работает.
Сейчас пытаюсь решить 2 смежные проблемы:
При выборе нужного торгового предложения в списке товаров (catalog.section) переходить при клике в карточку именно на выбранное торговое предложение
При выборе в умном фильтре значения свойства торгового предложения - показывать по умолчанию в выдаче именно торговое предложение, удовлетворяющее выбранному значению. (Например, есть товар, у него 3 торговых предложения - вариант в красном цвете, вариант в белом цвете, вариант в сером цвете. Если мы в умном фильтре выбрали фильтр по красному цвету - нужно, чтобы пользователю по умолчанию показывалось изображение товара в красном цвете, цена красного цвета и т.п.)
Коллеги, может, уже есть решение у кого-то? Поделитесь?
Юрий Огневин написал: А как сделать так, чтобы при переходе между торговыми предложениями внутри карточки товара, менялся и url? Т.е., например, /product/?pid=23 для белого цвета, /product/?pid=24 - для черного, При клике на черный- менять pid=23 на pid=24?
Юрий, нашли способ? Тоже заинтересован в этом решении!
Решил таким образом:
В window.JCCatalogElement.prototype.SelectOfferProp = function() в конец добавил
Код
loc = '?pid=' + this.offers[this.offerNum].ID;
history.pushState({}, '', loc);
Не знаю, насколько это корректно, но вроде работает.
Сейчас пытаюсь решить 2 смежные проблемы: При выборе нужного торгового предложения в списке товаров (catalog.section) переходить при клике в карточку именно на выбранное торговое предложение При выборе в умном фильтре значения свойства торгового предложения - показывать по умолчанию в выдаче именно торговое предложение, удовлетворяющее выбранному значению. (Например, есть товар, у него 3 торговых предложения - вариант в красном цвете, вариант в белом цвете, вариант в сером цвете. Если мы в умном фильтре выбрали фильтр по красному цвету - нужно, чтобы пользователю по умолчанию показывалось изображение товара в красном цвете, цена красного цвета и т.п.)
Коллеги, может, уже есть решение у кого-то? Поделитесь?
В window.JCCatalogElement.prototype.SelectOfferProp = function() в конец добавилКод loc = '?pid=' + this.offers[this.offerNum].ID; history.pushState({}, '', loc); Не знаю, насколько это корректно, но вроде работает.
А как сделать, чтобы ?pid=123 подставлялся при загрузке карточки товара? То есть перешёл из списка товаров на детальную и текущее, выбранное SKU сразу в отобразилось в адресной строке.
Изначально модуль генерирует ссылки, переходя по которым, покупатель с Маркета попадает на сайте на первое предложение (например, красный цвет) а наименование, передаваемое на Маркет в прайсе - желтый цвет. У нас я сделал следующее: в файле yandex_run.php нашел строку (836 в моем файле выгрузки) $strOfferTemplateURL = '#PRODUCT_URL#'; и изменил ее на $strOfferTemplateURL = '#PRODUCT_URL#?oid=#ID#'; теперь покупатель, кликая на Маркете на красный телефон, попадает в карточку, где ему автоматически показывает предложение с красным цветом.
Всем привет, не знаю в нужную тему пишу или нет, но столкнулся с проблемой выгрузки yandex_run.php Задача сделать чтобы в фиде обозначались все категории к которым относится один и тот же товар То есть вместо:
Код
<currencyId>RUR</currencyId>
<categoryId>282</categoryId>
<market_category>Все товары / Детские товары / Обучение и творчество </market_category>
стало это:
Код
<currencyId>RUR</currencyId>
<categoryId>282</categoryId>
<categoryId>2182</categoryId>
<categoryId>354</categoryId>
<market_category>Все товары / Детские товары / Обучение и творчество </market_category>
Пробовал все варианты из этой темы, но либо возникает ошибка, что экспорт совсем не происходит, либо Ошибка синтаксического анализа XML. Подскажите пожалуйста правильный код, чтобы для торговых предложений были уникальные адреса.
UPD вроде разобрался. Поторопился и забыл про сточку:
Пытался сделать также как тут писали ранее, в карточке товара ссылки нормально работают, а вот в экспорте не очень- если в первый раз сделать экспорт, то ссылки на предложения проставляются, но если зайти в настройки и сохранить, то ссылок на предложения больше не будет, т.к. скрипт yandex_detail.php изменился и уже не генерирует массив, который ожидает увидеть yandex_run.php, а если посмотреть обновленный скрипт yandex_run.php - то в нем уже нет переменных $strOfferTemplateURL и $strOfferYandex, поэтому ранее приведенные инструкции просто некуда внедрять.
Вобщем для тех у кого проявится такая же проблема, новая инструкция: нужно как писали ранее скопировать /bitrix/modules/catalog/load/yandex_run.php в /bitrix/php_interface/include/catalog_export/ с заменой. Далее правим строку 1613:
Алексей написал: Пытался сделать также как тут писали ранее, в карточке товара ссылки нормально работают, а вот в экспорте не очень- если в первый раз сделать экспорт, то ссылки на предложения проставляются, но если зайти в настройки и сохранить, то ссылок на предложения больше не будет, т.к. скрипт yandex_detail.php изменился и уже не генерирует массив, который ожидает увидеть yandex_run.php, а если посмотреть обновленный скрипт yandex_run.php - то в нем уже нет переменных $strOfferTemplateURL и $strOfferYandex, поэтому ранее приведенные инструкции просто некуда внедрять.
Вобщем для тех у кого проявится такая же проблема, новая инструкция: нужно как писали ранее скопировать /bitrix/modules/catalog/load/yandex_run.php в /bitrix/php_interface/include/catalog_export/ с заменой. Далее правим строку 1613:
Алексей написал: А нужно ли указывать в выгрузке товар если используются ко всем товарам предложения, а сами товары без цен?Мне кажется что не нужно
Я имею ввиду ссылка на предложение формируется не правильно. Нет пути в Каталог ==>Категория ==> Товар к примеру. В общем это та же самая проблема, что была и раньше.