Jump to content

Яндекс.Маркет параметр <market_category>


Recommended Posts

Доброе время суток.

ЯндексМаркет коряво автоматом по категориям товар раскидывает.
Категорий как минимум 5-6 задействовано на Яндексе.
Товар на сайте тоже в своих категориях, и получается 2-5 категорий сайта, это 1 категория на Яндексе.

 

Как присвоить категориям сайта категории Яндекс.Маркета (прописать их вручную) и добавить параметр <market_category>  в yandex.php 

 

Категории Яндекс.Маркета http://download.cdn.yandex.net/market/market_categories.xls

 

Привязку лучше делать "категория ЯМ <-> Категория сайта", т.к. для "категория ЯМ <-> конкретный товар сайта" это более трудозатратно для добавления и дальнейшего изменения при необходимости

 

Спасибо.

Edited by DVlink
Link to post
Share on other sites

Не дождался помощи, кроме предложения заплатить.

Навоял сам вот так:

 

Сделал привязку к категории каждого продукта:

 

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="Сохранить" />
 
5. В файл yandex.php после 

p.body,
пишем
p.cat_yandex,

далее после 

<categoryId>".$p->category_id."</categoryId>
пишем
<market_category>".htmlspecialchars(strip_tags($p->cat_yandex))."<market_category>

Link to post
Share on other sites

Спасибо, сделано вроде бы правильно и аккуратненько.
 
Замечания:
1. Ссылка Ваша на список категорий битая.
2. Новое поле хорошо бы обрабатывать экспортом-импортом.
3. В начале Вы хотели
 

Привязку лучше делать "категория ЯМ <-> Категория сайта", т.к. для "категория ЯМ <-> конкретный товар сайта" это более трудозатратно для добавления и дальнейшего изменения при необходимости

а в итоге сделали почему-то как раз трудозатратным способом....

Link to post
Share on other sites

Спасибо, сделано вроде бы правильно и аккуратненько.

Даже лучше, чем в OkayCMS, там надо руками вводить полный путь категорий, что практически будет вести к многочисленным ошибкам.

 

Замечания:

1. Ссылка Ваша на список категорий битая.

2. Новое поле хорошо бы обрабатывать экспортом-импортом.

3. В начале Вы хотели

 

а в итоге сделали почему-то как раз трудозатратным способом....

 

да минуса 3 даже))

 

1. руками надо категории вводить в код (но у меня их не так много, и можно убрать select, тогда руками надо вбивать.. что еще большие ошибки)

2. не разобрался как категории прикрутить.. получилось только в товаре (но есть и свои плюсы)

3. т.к. выбор категории через select, то при перезагрузке/сохранении страницы выбор идет на первый вариант (поэтому и сделал его пустым и напоминание в шапке) и приходится снова задавать категорию. Как сохранять последний выбранный вариант еще не разобрался

Link to post
Share on other sites
  • 7 months later...

 

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>
";

А ничего что в Яндексе могут быть не такие названия категорий как в вашем магазине?

Link to post
Share on other sites

А ничего что в Яндексе могут быть не такие названия категорий как в вашем магазине?

Не понял вопроса. Используя эту доработку вы в каждом товаре задаете индивидуально ту категорию, к которой, по вашему мнению, относится редактируемый товар. В пункте 4 предлагается создать SELECT (выпадающий список с выбором категорий). В код этого селекта вы как раз и добавляете наиболее подходящие для себя рубрики.

Link to post
Share on other sites

Вы молодцом.

 

Я такого плана проблемы решаю через свойства товаров.

 

Создаю свойство и условиями ifelse делаю как мне надо :)

 

Для небольших магазинов в самый раз

Link to post
Share on other sites
  • 2 months later...

Из таблицы 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 by unrealock
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...