Перейти к содержанию
Официальный форум поддержки Simpla

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


Рекомендуемые сообщения

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

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

 

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

 

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

 

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

 

Спасибо.

Изменено пользователем DVlink
Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

 

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>

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

 

Замечания:

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

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

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

 

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

 

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

 

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 7 месяцев спустя...
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>
";
Ссылка на сообщение
Поделиться на другие сайты

 

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

Ссылка на сообщение
Поделиться на другие сайты

Вы молодцом.

 

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

 

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

 

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

Ссылка на сообщение
Поделиться на другие сайты
  • 2 месяца спустя...

Из таблицы 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>
";
Изменено пользователем unrealock
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...