Simpla CMS: выборочная выгрузка в Яндекс.Маркет


Simpla 2: выборочная выгрузка в Яндекс.Маркет

Установка (пошаговая инструкция)

Как обычно в таких ситуациях нам надо добавить поле для отметки нужных товаров. Для этого в таблице товаров s_products создаем поле to_yandexи вторым запросом выставим его значение на "1", чтобы все стояли в активном состоянии (через phpmyadmin или аналогичный).

1
2
ALTER TABLE `s_products` ADD `to_yandex` TINYINT( 1 ) NOT NULL AFTER `featured`;
UPDATE `s_products` SET `to_yandex` = 1;

Теперь обработаем это значение в файле выгрузки в корне сайта yandex.php - найдем код (~55 строка)

1
WHERE p.visible

и заменим на

1
WHERE p.visible AND p.to_yandex

Все! Теперь товар у которого стоит "1" будет выгружаться, а с "0" - нет.

Сделаем админскую часть для этого функционала. Будем расширять карточку товара - в simpla/ProductAdmin.php сразу после кода (24 строка)

24
$product->visible = $this->request->post('visible', 'boolean');

вставляем код

25
$product->to_yandex = $this->request->post('to_yandex', 'boolean');

И теперь добавим в шаблоне товара "галочку". Для этого в файле simpla/design/html/product.tpl после строк (485)

485
486
487
<div class="checkbox">
<input name=featured value="1" type="checkbox" id="featured_checkbox" {if $product->featured}checked{/if}/> <label for="featured_checkbox">Рекомендуемыйlabel>
div>

добавим код

488
489
490
<div class="checkbox">
<input name=to_yandex value="1" type="checkbox" id="yandex_checkbox" {if $product->to_yandex}checked{/if}/> <label for="yandex_checkbox">Yandexlabel>
div>

Чтобы Ваше поле to_yandex выводилось в списке товаров надо модифицировать класс товара api/Products.php - после строки (141)

141
p.visible,

добавим поле

142
p.to_yandex,

И аналогично в методе get_product в этом же файле (для карточки товара).

Теперь наша "галочка" сохраняется в базе. Только для полноты картинки - я бы переименовал "Рекомендуемый" в "Хит", а-то слово уж больно длинное.

Сейчас можно работать, но было бы неплохо создать массовое изменение - поэтому идем в список товаров simpla/ProductsAdmin.php и там после строк (строка 100)

100
101
102
103
104
case 'unset_featured':
{
$this->products->update_product($ids, array('featured'=>0));
break;
}

добавим код

105
106
107
108
109
110
111
112
113
114
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)

120
<option value="unset_featured">Отменить рекомендуемыйoption>

добавим код

121
122
<option value="set_yandex">Отправлять в Yandexoption>
<option value="unset_yandex">Не отправлять в Yandexoption>

Есть еще 1 приятная мелочь - аяксовые кнопочки напротив каждого товара и мы сделаем свои для Yandex.Market. Выше в этом же файле найдем (62 строка)

62
{if $product->featured}featured{/if}

и добавим после него

62
{if $product->to_yandex}yandex{/if}

Далее по коду найдем (102 строка)

102
<a class="featured" title="Рекомендуемый" href="#">a>

и добавим

103
<a class="yandex" title="Yandex.Market" href="#">a>

И допишем javascript-обработчик для всего этого - по сути это копия "сделать хитом" только со своим полем. Перед строкой (459)

459
// Подтверждение удаления

добавим код

459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
// 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 строка)

851
.icons a.restore { background-image: url(../images/clock_history_frame.png); }

добавим код

852
853
.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.


#web #simplacms
240




Поиск по сайту