DVlink Posted January 8, 2016 Report Share Posted January 8, 2016 (edited) Доброе время суток.ЯндексМаркет коряво автоматом по категориям товар раскидывает.Категорий как минимум 5-6 задействовано на Яндексе.Товар на сайте тоже в своих категориях, и получается 2-5 категорий сайта, это 1 категория на Яндексе. Как присвоить категориям сайта категории Яндекс.Маркета (прописать их вручную) и добавить параметр <market_category> в yandex.php Категории Яндекс.Маркета http://download.cdn.yandex.net/market/market_categories.xls Привязку лучше делать "категория ЯМ <-> Категория сайта", т.к. для "категория ЯМ <-> конкретный товар сайта" это более трудозатратно для добавления и дальнейшего изменения при необходимости Спасибо. Edited January 8, 2016 by DVlink Quote Link to post Share on other sites
DVlink Posted January 11, 2016 Author Report Share Posted January 11, 2016 Не дождался помощи, кроме предложения заплатить.Навоял сам вот так: Сделал привязку к категории каждого продукта: 1. В БД параметр s_products добавляем поле cat_yandex:ALTER TABLE `s_products` ADD `cat_yandex` TEXT NOT NULL AFTER `body` 2. В api/Products.php после: $query = "SELECT p.id, p.url, p.brand_id, p.name, p.annotation, p.body,добавляем cat_yandex, Далее там же в api/Products.php после: $query = "SELECT DISTINCT p.id, p.url, p.brand_id, p.name, p.annotation, p.body,добавляем cat_yandex, 3. в файле simpla/ProductAdmin.php после:$product->body = $this->request->post('body');добавляем:$product->cat_yandex = $this->request->post('cat_yandex'); 4. В файле simpla/design/html/product.tpl:(для напоминания при сохранении изменений товара о выбранной категории) <span class="text">{if $message_success=='added'}Товар добавлен{elseif $message_success=='updated'}Товар изменен.{else}{$message_success|escape}{/if}</span> заменим на <span class="text">{if $message_success=='added'}Товар добавлен{elseif $message_success=='updated'}Товар изменен. <br><font color=red><b>Проверте категорию Яндекс.Маркет</b></font> ({$product->cat_yandex|escape|strip_tags|truncate:500}).{else}{$message_success|escape}{/if}</span> после<li><label class=property>Описание</label><textarea name="meta_description" class="simpla_inp" />{$product->meta_description|escape}</textarea></li> добавляем:<li><label class=property>Категория Яндекс.Маркета</label><textarea name="cat_yandex" class="simpla_inp" style="height: 40px;">{$product->cat_yandex|escape|strip_tags|truncate:500}</textarea></li> <li><label class=property>Указываем категорию Яндекс.Маркета</label><select name="cat_yandex" class="simpla_inp"> <option value="">Не задана</option> <option value="Авто/Мототехника">Мототехника</option> <option value="Авто/Мототехника/Аксессуары">Мототехника -> Аксессуары</option> <option value="Авто/Мототехника/Запчасти">Мототехника -> Запчасти</option> </select></li><input class="button_green button_save" type="submit" name="" value="Сохранить" /> Категории берем из http://download.cdn.yandex.net/market/market_categories.xls5. В файл yandex.php после p.body,пишемp.cat_yandex,далее после <categoryId>".$p->category_id."</categoryId>пишем<market_category>".htmlspecialchars(strip_tags($p->cat_yandex))."<market_category> Quote Link to post Share on other sites
Kors Posted January 11, 2016 Report Share Posted January 11, 2016 Спасибо, сделано вроде бы правильно и аккуратненько. Замечания:1. Ссылка Ваша на список категорий битая.2. Новое поле хорошо бы обрабатывать экспортом-импортом.3. В начале Вы хотели Привязку лучше делать "категория ЯМ <-> Категория сайта", т.к. для "категория ЯМ <-> конкретный товар сайта" это более трудозатратно для добавления и дальнейшего изменения при необходимостиа в итоге сделали почему-то как раз трудозатратным способом.... Quote Link to post Share on other sites
DVlink Posted January 11, 2016 Author Report Share Posted January 11, 2016 Спасибо, сделано вроде бы правильно и аккуратненько.Даже лучше, чем в OkayCMS, там надо руками вводить полный путь категорий, что практически будет вести к многочисленным ошибкам. Замечания:1. Ссылка Ваша на список категорий битая.2. Новое поле хорошо бы обрабатывать экспортом-импортом.3. В начале Вы хотели а в итоге сделали почему-то как раз трудозатратным способом.... да минуса 3 даже)) 1. руками надо категории вводить в код (но у меня их не так много, и можно убрать select, тогда руками надо вбивать.. что еще большие ошибки)2. не разобрался как категории прикрутить.. получилось только в товаре (но есть и свои плюсы)3. т.к. выбор категории через select, то при перезагрузке/сохранении страницы выбор идет на первый вариант (поэтому и сделал его пустым и напоминание в шапке) и приходится снова задавать категорию. Как сохранять последний выбранный вариант еще не разобрался Quote Link to post Share on other sites
DVlink Posted January 11, 2016 Author Report Share Posted January 11, 2016 2. В api/Products.php после: добавляем p.cat_yandex, Далее там же в api/Products.php после: p.cat_yandex, Quote Link to post Share on other sites
Kors Posted January 11, 2016 Report Share Posted January 11, 2016 2. не разобрался как категории прикрутить..По аналогии с http://forum.simplacms.ru/topic/9989-%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5-%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B8/ Quote Link to post Share on other sites
DVlink Posted January 11, 2016 Author Report Share Posted January 11, 2016 По аналогии сhttp://forum.simplacms.ru/topic/9989-%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5-%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B8/спасибо, попробую Quote Link to post Share on other sites
yourock Posted September 8, 2016 Report Share Posted September 8, 2016 5. В файл yandex.php после p.body,пишемp.cat_yandex,далее после <categoryId>".$p->category_id."</categoryId>пишемif($p->cat_yandex)print "<market_category>".htmlspecialchars(strip_tags($p->cat_yandex))."</market_category>"; Quote Link to post Share on other sites
Kniazdiit Posted September 8, 2016 Report Share Posted September 8, 2016 5. В файл yandex.php после p.body,пишемp.cat_yandex,далее после <categoryId>".$p->category_id."</categoryId>пишемif($p->cat_yandex)print "<market_category>".htmlspecialchars(strip_tags($p->cat_yandex))."</market_category>";А ничего что в Яндексе могут быть не такие названия категорий как в вашем магазине? Quote Link to post Share on other sites
yourock Posted September 8, 2016 Report Share Posted September 8, 2016 А ничего что в Яндексе могут быть не такие названия категорий как в вашем магазине?Не понял вопроса. Используя эту доработку вы в каждом товаре задаете индивидуально ту категорию, к которой, по вашему мнению, относится редактируемый товар. В пункте 4 предлагается создать SELECT (выпадающий список с выбором категорий). В код этого селекта вы как раз и добавляете наиболее подходящие для себя рубрики. Quote Link to post Share on other sites
Maksclub Posted September 8, 2016 Report Share Posted September 8, 2016 Вы молодцом. Я такого плана проблемы решаю через свойства товаров. Создаю свойство и условиями ifelse делаю как мне надо Для небольших магазинов в самый раз Quote Link to post Share on other sites
unrealock Posted December 8, 2016 Report Share Posted December 8, 2016 p.body, откуда берется в yandex.php? Quote Link to post Share on other sites
Noxter Posted December 8, 2016 Report Share Posted December 8, 2016 p.body, откуда берется в yandex.php?Из таблицы s_products, ячейка такая body которая служит для описания товара. Quote Link to post Share on other sites
unrealock Posted December 8, 2016 Report Share Posted December 8, 2016 (edited) Из таблицы s_products, ячейка такая body которая служит для описания товара.Это понятно но в yandex.php она не прописана, а тут сказано после p.body, от сюда и вопрос куда писать p.cat_yandex, <?php require_once('api/Simpla.php');$simpla = new Simpla(); header("Content-type: text/xml; charset=UTF-8");print (pack('CCC', 0xef, 0xbb, 0xbf));// Заголовокprint"<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE yml_catalog SYSTEM 'shops.dtd'><yml_catalog date='".date('Y-m-d H:i')."'><shop><name>".$simpla->settings->site_name."</name><company>".$simpla->settings->company_name."</company><url>".$simpla->config->root_url."</url>"; // Валюты$currencies = $simpla->money->get_currencies(array('enabled'=>1));$main_currency = reset($currencies);print "<currencies>";foreach($currencies as $c)if($c->enabled)print "<currency id='".$c->code."' rate='".$c->rate_to/$c->rate_from*$main_currency->rate_from/$main_currency->rate_to."'/>";print "</currencies>"; // Категории$categories = $simpla->categories->get_categories();print "<categories>";foreach($categories as $c){print "<category id='$c->id'";if($c->parent_id>0) print " parentId='$c->parent_id'";print ">".htmlspecialchars($c->name)."</category>";}print "</categories>"; // Товары$simpla->db->query("SET SQL_BIG_SELECTS=1");// Товары$simpla->db->query("SELECT v.price, v.id as variant_id, p.name as product_name, v.name as variant_name, v.position as variant_position, p.id as product_id, p.url, p.annotation, pc.category_id, i.filename as image FROM __variants v LEFT JOIN __products p ON v.product_id=p.id, p.cat_yandex LEFT JOIN __products_categories pc ON p.id = pc.product_id AND pc.position=(SELECT MIN(position) FROM __products_categories WHERE product_id=p.id LIMIT 1) LEFT JOIN __images i ON p.id = i.product_id AND i.position=(SELECT MIN(position) FROM __images WHERE product_id=p.id LIMIT 1) WHERE p.visible AND (v.stock >0 OR v.stock is NULL) GROUP BY v.id ORDER BY p.id, v.position ");print "<offers>"; $currency_code = reset($currencies)->code; // В цикле мы используем не results(), a result(), то есть выбираем из базы товары по одному,// так они нам одновременно не нужны - мы всё равно сразу же отправляем товар на вывод.// Таким образом используется памяти только под один товар$prev_product_id = null;while($p = $simpla->db->result()){$variant_url = '';if ($prev_product_id === $p->product_id) $variant_url = '?variant='.$p->variant_id;$prev_product_id = $p->product_id; $price = round($simpla->money->convert($p->price, $main_currency->id, false),2);print"<offer id='$p->variant_id' available='true'><url>".$simpla->config->root_url.'/products/'.$p->url.$variant_url."</url>";print "<price>$price</price><currencyId>".$currency_code."</currencyId><categoryId>".$p->category_id."</categoryId>";if($p->cat_yandex)print "<market_category>".htmlspecialchars(strip_tags($p->cat_yandex))."</market_category>"; if($p->image)print "<picture>".$simpla->design->resize_modifier($p->image, 200, 200)."</picture>"; print "<name>".htmlspecialchars($p->product_name).($p->variant_name?' '.htmlspecialchars($p->variant_name):'')."</name><description>".htmlspecialchars(strip_tags($p->annotation))."</description></offer>";} print "</offers>";print "</shop></yml_catalog>"; Edited December 8, 2016 by unrealock Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.