Simpla 2: выборочная выгрузка в Яндекс.Маркет
Как обычно в таких ситуациях нам надо добавить поле для отметки нужных товаров. Для этого в таблице товаров s_products создаем поле to_yandex и вторым запросом выставим его значение на "1", чтобы все стояли в активном состоянии (через phpmyadmin или аналогичный).
ALTER TABLE `s_products` ADD `to_yandex` TINYINT( 1 ) NOT NULL AFTER `featured`; UPDATE `s_products` SET `to_yandex` = 1;
Теперь обработаем это значение в файле выгрузки в корне сайта yandex.php - найдем код (~55 строка)
WHERE p.visible
и заменим на
WHERE p.visible AND p.to_yandex
Все! Теперь товар у которого стоит "1" будет выгружаться, а с "0" - нет.
Сделаем админскую часть для этого функционала. Будем расширять карточку товара - в simpla/ProductAdmin.php сразу после кода (24 строка)
$product->visible = $this->request->post('visible', 'boolean');
вставляем код
$product->to_yandex = $this->request->post('to_yandex', 'boolean');
И теперь добавим в шаблоне товара "галочку". Для этого в файле simpla/design/html/product.tpl после строк (485)
<div class="checkbox"> <input name=featured value="1" type="checkbox" id="featured_checkbox" {if $product->featured}checked{/if}/> <label for="featured_checkbox">Рекомендуемый</label> </div>
добавим код
<div class="checkbox"> <input name=to_yandex value="1" type="checkbox" id="yandex_checkbox" {if $product->to_yandex}checked{/if}/> <label for="yandex_checkbox">Yandex</label> </div>
Чтобы Ваше поле to_yandex выводилось в списке товаров надо модифицировать класс товара api/Products.php - после строки (141)
p.visible,
добавим поле
p.to_yandex,
И аналогично в методе get_product в этом же файле (для карточки товара).
Теперь наша "галочка" сохраняется в базе. Только для полноты картинки - я бы переименовал "Рекомендуемый" в "Хит", а-то слово уж больно длинное.
Сейчас можно работать, но было бы неплохо создать массовое изменение - поэтому идем в список товаров simpla/ProductsAdmin.php и там после строк (строка 100)
case 'unset_featured': { $this->products->update_product($ids, array('featured'=>0)); break; }
добавим код
case 'set_yandex': { $this->products->update_product($ids, array('to_yandex'=>1)); break; } case 'unset_yandex': { $this->products->update_product($ids, array('to_yandex'=>0)); break; }
И добавим "обертку" в шаблоне simpla/design/html/products.tpl после строки (120)
<option value="unset_featured">Отменить рекомендуемый</option>
добавим код
<option value="set_yandex">Отправлять в Yandex</option> <option value="unset_yandex">Не отправлять в Yandex</option>
Есть еще 1 приятная мелочь - аяксовые кнопочки напротив каждого товара и мы сделаем свои для Yandex.Market. Выше в этом же файле найдем (62 строка)
{if $product->featured}featured{/if}
и добавим после него
{if $product->to_yandex}yandex{/if}
Далее по коду найдем (102 строка)
<a class="featured" title="Рекомендуемый" href="#"></a>
и добавим
<a class="yandex" title="Yandex.Market" href="#"></a>
И допишем javascript-обработчик для всего этого - по сути это копия "сделать хитом" только со своим полем. Перед строкой (459)
// Подтверждение удаления
добавим код
// Yandex.market $("a.yandex").click(function() { var icon = $(this); var line = icon.closest("div.row"); var id = line.find('input[type="checkbox"][name*="check"]').val(); var state = line.hasClass('yandex')?0:1; icon.addClass('loading_icon'); $.ajax({ type: 'POST', url: 'ajax/update_object.php', data: {'object': 'product', 'id': id, 'values': {'to_yandex': state}, 'session_id': '{/literal}{$smarty.session.id}{literal}'}, success: function(data){ icon.removeClass('loading_icon'); if(state) line.addClass('yandex'); else line.removeClass('yandex'); }, dataType: 'json' }); return false; });
Никаких ajax-обработчиков не надо переделывать и писать, т.к. стандартный считывает статус конкретного параметра - в нашем случае это to_yandex.
Теперь поправим стили и наведем небольшую "красоту". Открываем файл simpla/design/css/style.css и после кода (851 строка)
.icons a.restore { background-image: url(../images/clock_history_frame.png); }
добавим код
.icons a.yandex { background-image: url(../images/yandex_off.png); } .yandex .icons a.yandex { background-image: url(../images/yandex_on.png); }
И поскольку мы добавили иконку в строку товара - расширим место под нее. В строке 633 поменяем длину поля имени с 505px на 485px. Ну и естественно надо залить картинки, которые мы вызываем - иконки Yandex. Скачиваем их и заливаем в папку simpla/design/images.
Вот и все на сегодня. Спрашивайте, экспериментируйте, оказывайте поддержку :) .
1
WHERE p.visible
и заменим на
1
WHERE p.visible AND p.to_yandex
Ай у меня там
LEFT JOIN s_products_categories pc ON p.id = pc.product_id AND pc.position=(SELECT MIN(position) FROM s_products_categories WHERE product_id=p.id LIMIT 1)
LEFT JOIN s_images i ON p.id = i.product_id AND i.position=(SELECT MIN(position) FROM s_images WHERE product_id=p.id LIMIT 1)
LEFT JOIN s_brands b ON p.brand_id = b.id
WHERE p.visible AND (v.stock >0 OR v.stock is NULL) GROUP BY v.id");
print "<offers>
Можно сделать по аналогии с "рекоммендуемыми"
Файлы в которые нужно вносить изменения:
api/Products.php
simpla/ProductsAdmin.php
simpla/design/html/products.tpl
если не сможете самостоятельно - обращайтесь в скайп simplashop.com
url: 'ajax/update_object.php'
Я проверил инсталяшку и там тоже нет этого файла
Где его взять? Подскажите, пожалуйста.
этот скрипт относится к админке и файл находится по пути simpla/ajax/update_object.php
параметр уже имеет расширенную запись WHERE p.visible AND .....(другой код), как тогда записать эту строку: WHERE p.visible AND p.to_yandex ?
После WHERE p.visible добавить AND p.to_yandex
Вопрос по предпоследнему шагу:
В строке 633 поменяем длину поля имени с 505px на 485px.
У меня нет стиля с такой длинной, можете подсказать как называется стиль или атрибут стиля?
#list .product_name
Да, можно, правда решение платное. С помощью вот этого модуля http://simplashop.com/products/vyborochnaya-vygruzka-tovarov-v-yandex-market , при установке мы сделаем так, чтобы все товары по умолчанию небыли выбраны для выгрузки в маркет. Для просмотра демо модуля http://export-yandex-vibor.simplathemes.com/simpla/ логин - simplashop, пароль - simplashop
Заранее спасибо. http://ska-group.by/
Проверьте правильность выполнения инструкции для файла simpla/design/html/products.tpl. Вы могли вставить скрипт в неположенное место. Хочу отметить, что указанные строки являются приблизительными, т.к. в зависимости от версии содержание файлов системы может немного меняться
Это не файл, а таблица в базе данных. С БД работают с помощью различных интерфейсов (phpmyadmin, adminer...) в зависимости от вашего хостера
Сейчас на тех товарах, на которых стояла звездочка Хиты продаж, Я не включается ? или я еще где ошибся
Ваш комментарий нам не понятен. Уточните, пожалуйста, вопрос
Добрый день, в зависимости от версии Симплы и возможных доработок, номера строк могут отличаться - это не строгий параметр. Сделайте поиск по тексту на предмет наличия "
id
=
"featured_checkbox"
". Поле с таким ID обязательно есть в стандартной Симпле.Поставил, все бы не чего но тут яндекс выдал вот это
Определена кодировка: utf-8
Дата из файла: 2015-03-15 16:12 (строка 3, столбец 37)
Фатальная ошибка: Ошибка парсинга XML: Error parsing XML feed: Required child tag "offer" is missing for XML tag "offers" (строка 63, столбец 10)
Не знаю что делать!
Подскажите.
Здравствуйте. Изменения в yandex.php касаются только запроса и никак не влияют на структуру документа. Ошибка говорит, что пропущен тег <offers>.
Просмотрите файл yandex.php на наличие таких строк
строка ~55-56
print "<offers>
";
сразу после запроса и почти в самом конце строка ~101-102
print "</offers>
";