0 Пользователей и 1 Гость просматривают эту тему.
  • 285 Ответов
  • 54173 Просмотров
*

beagler

  • Живу я здесь
  • 3276
  • 392 / 4
  • https://alorisman.ru/
*

beagler

  • Живу я здесь
  • 3276
  • 392 / 4
  • https://alorisman.ru/
Хм. Почему-то ни в одном скрипте не увидел чтобы выдавали в ямаркет выдавали атрибуты. Расскажу как сделал я. У меня в магазине есть всего один атрибут - Размер. Поэтому не буду перебирать атрибуты - а если они есть у товара, то считаем что это размер.
В начале скрипта где-то после
Код
$pdo->exec('SET NAMES utf8');
пишем
Код
$pdo_attr = new PDO("mysql:host={$hostname};dbname={$dbName}", $username, $password);
// Исправьте, если у вас другая кодировка в БД
$pdo_attr->exec('SET NAMES utf8');
далее после
Код
if (!in_array($row['product_id'],$product_log) && ($row['product_price']) && $row['product_price'] > 0) {
пишем
Код
//attr
$iattr=0;
$query = "
SELECT `value`.`name_ru-RU` as attr_name FROM `alrs_jshopping_attr_values` AS value, `alrs_jshopping_products_attr2` AS xref
            WHERE `xref`.`attr_id`=`value`.`attr_id` AND `xref`.`attr_value_id`=`value`.`value_id` AND `xref`.`product_id`=".$row['product_id'];
$attr=' Размер ';
$res_attr = $pdo_attr->query($query);
while ($row_attr= $res_attr->fetch(PDO::FETCH_ASSOC)) {
if($iattr>0) $attr.=', ';
$attr.=$row_attr['attr_name'];
$iattr++;
}
if ($attr==' Размер ') $attr='';
//attr
я значения размера вставляю после названия товара - нет в ямаркете поля для размера. Поэтому вместо
Код
echo "<name>".$row['product_name']."</name>\n";
пишем
Код
echo "<name>".$row['product_name'].$attr."</name>\n";
В итоге получаем - 'Кольцо с жемчугом арт.0121 Размер 18.5, 18.0, 17.5, 17.0'
*

ghio

  • Захожу иногда
  • 102
  • 0 / 0
хм, так Вам же пишут что нет функции normalizeArray в 73 строке скрипта?
Эта функция в конце скрипта называется у Вас nomalizeArray
Исправьте
Ошибку исправила, но выдавалась ошибка не в строке 73, а в 93. Сейчас ответ такой
Спойлер
[свернуть]

Хотя вчера кодировку ям определял.
*

ghio

  • Захожу иногда
  • 102
  • 0 / 0
теперь дает Fatal error: Call to a member function fetch() on a non-object in /var/www/u2327082/public_html/botanmedia.ru/ym_export.php on line 112
Как побороть? Может можете помочь? В ветке увидела такую проблему у человека, решилась отключением в htaccess вывода ошибок. Но мне это не подходит....
*

ghio

  • Захожу иногда
  • 102
  • 0 / 0
так как у Вас не срабатывает $res->fetch(PDO::FETCH_ASSOC - ошибки в запросе. Выводите $query - и отлаживайте в phpMyAdmin
beagler, благодарю вас за терпение и помощь (это я подмазываюсь)))) сделала, как вы и говорили, но как отладить в phpMyAdmin знаний не хватает. При запросе в браузере выдал такое: сначала все категории, потом
Спойлер
[свернуть]
Знаю, что у одного формучанина были такие же проблемы, но мне его решение не подходит. В ям опять ответ
Спойлер
[свернуть]

Хочу разобраться и научиться во всем этом сама для дальнейшей работы, но на данном этапе никак не справлюсь. Просто подскажите ход действий и логику, чтобы самой все настроить))))
Благодарю за помощь)
*

beagler

  • Живу я здесь
  • 3276
  • 392 / 4
  • https://alorisman.ru/
Столкнулись с проблемой - в скрипте неправильно обрабатываются extra поля. Если атрибуты много раз вводились и удалялись - их нумерация идет не последовательно. Как изменить скрипт:
Вместо
Код
 for($i = 1; $i <= $extra_cnt; $i++) {
         $extra_select .= "{$tb_product}.extra_field_{$i},";
      }
пишем
Код
foreach($extra_info as $key=>$value){
$extra_select .= "{$tb_product}.extra_field_{$key},";
}
*

Shiffer

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
Перепробовал все варианты исправления кода скрипта в этой теме, но ничего не помогает. В YML файле создаются категории, а товары не создаются. Пишет просто пустые теги <offers></offers>.
Стоит Joomla 2.5.9 и JoomShopping 3.12
Может кто-нибудь сталкивался с подобным или подскажет в какую сторону копать?
*

Shiffer

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
Вам нужно решить проблему или узнать сталкивался кто нибудь или нет?
Скрипт покажите.
Конечно же решить проблему!
Скрипт вот такой
Код
<?php
header ("Content-Type:text/xml");
// Пропишите относительный путь к 'configuration.php' (он находится в корне Joomla)
// Например: include '../configuration.php';
include '/home/s5928/public_html/site.ru/public_html/configuration.php';
$cfg = new JConfig();
 
//NAME - Короткое название магазина (название, которое выводится в списке найденных на Яндекс.Маркете товаров.
//Не должно содержать более 20 символов). Нельзя использовать слова, не имеющие отношения к
//наименованию магазина ("лучший", "дешевый"), указывать номер телефона и т.п. Название магазина,
//должно совпадать с фактическим названием магазина, которое публикуется на сайте. При несоблюдении
//данного требования наименование может быть изменено Яндексом самостоятельно без уведомления Клиента.
//ВНИМАНИЕ! Обязательно укажите в переменную, по какому пути у Вас расположена главная страница каталога JoomShopping,
//точнее то что идет после адреса самого сайта http://mysite.ru/katalog, в данном случае, нужно указать переменной $js_main_page = "katalog";
$cfg_name = $cfg->fromname;
$js_main_page = "katalog";

$cfg_company = $cfg->sitename; //Полное наименование компании, владеющей магазином. Не публикуется, используется для внутренней идентификации.
$cfg_url = 'site.ru'; //URL-адрес главной страницы магазина без http://
$bid = '10'; // Ставка за клик (в центах)
$currency = 'RUR';
  
$hostname = $cfg->host;
$username = $cfg->user;
$password = $cfg->password;
$dbName = $cfg->db;

$category = $cfg->dbprefix."jshopping_categories";
$tb_product = $cfg->dbprefix."jshopping_products";
$tb_manufacturer = $cfg->dbprefix."jshopping_manufacturers";
$tb_product_category_xref = $cfg->dbprefix."jshopping_products_to_categories";

try {
    $pdo = new PDO("mysql:host={$hostname};dbname={$dbName}", $username, $password);
// Исправьте, если у вас другая кодировка в БД
$pdo->exec('SET NAMES utf8');

echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
echo "<!DOCTYPE yml_catalog SYSTEM \"shops.dtd\">\n";
echo "<yml_catalog date=\"";
echo date('Y-m-d H:i');
echo "\">\n";
echo "<shop>\n";
echo "<name>$cfg_name</name>\n";
echo "<company>$cfg_company</company>\n";
echo "<url>$cfg_url</url>\n";

// курсы валют, приравнены к курсу ЦБРФ
echo "<currencies>\n";
echo "<currency  id=\"RUR\" rate=\"1\"/>\n";
echo "<currency  id=\"USD\" rate=\"CBRF\"/>\n";
echo "<currency  id=\"EUR\" rate=\"CBRF\"/>\n";
echo "</currencies>\n";

// Секция категорий
echo "<categories>\n";
$res = $pdo->query("SELECT * FROM $category");
while ($row_cat= $res->fetch(PDO::FETCH_ASSOC)) {
$cat_parent_id=$row_cat['category_parent_id'];
$parent = ($cat_parent_id != 0)? " parentId=\"{$cat_parent_id}\"" : "";
echo "<category id=\"{$row_cat['category_id']}\"{$parent}>{$row_cat['name_ru-RU']}</category>\n";
}
unset($res);
echo"</categories>\n";

// Секция описания товаров
echo"<offers>\n";

$res = $pdo->query("SELECT id, `name_ru-RU` as name FROM {$cfg->dbprefix}jshopping_products_extra_fields");
$extra_info = $res->fetchAll(PDO::FETCH_ASSOC);
$extra_info = nomalizeArray($extra_info, 'name');


$res = $pdo->query("SELECT `id`, `name_ru-RU` as exv_name FROM {$cfg->dbprefix}jshopping_products_extra_field_values");
$extra_info_val = $res->fetchAll(PDO::FETCH_ASSOC);
$extra_info_val = nomalizeArray($extra_info_val, 'exv_name');

$extra_select = '';
$extra_cnt = count($extra_info);
if($extra_cnt != 0) {
for($i = 1; $i <= $extra_cnt; $i++) {
$extra_select .= "{$tb_product}.extra_field_{$i},";
}
}
$query = "
SELECT
{$extra_select}
{$tb_product}.product_id,
{$tb_product}.`name_ru-RU` as product_name,
{$tb_manufacturer}.`name_ru-RU` as mf_name,
{$tb_manufacturer}.`manufacturer_id`,
{$tb_product_category_xref}.`category_id`,
{$tb_product}.`product_price`,
{$tb_product}.`product_id` as product_sku,
{$tb_product}.`product_quantity`,
{$tb_product}.`product_full_image` as product_full_image,
{$tb_product}.`short_description_ru-RU` as product_s_desc
FROM
{$tb_product}
LEFT JOIN {$tb_product_category_xref}
ON {$tb_product}.product_id = {$tb_product_category_xref}.product_id
LEFT JOIN {$tb_manufacturer}
ON {$tb_product}.product_manufacturer_id = {$tb_manufacturer}.manufacturer_id

WHERE {$tb_product}.product_publish='1'
GROUP BY {$tb_product}.product_id
";

$product_log = Array();
$res = $pdo->query($query);
while ($row= $res->fetch(PDO::FETCH_ASSOC)) {
if (!in_array($row['product_id'],$product_log) && ($row['product_price']) && $row['product_price'] > 0) {
$product_log[] = $row['product_id'];
$product_price = substr($row['product_price'], 0, -3);
echo "\n<offer id=\"".$row['product_id']."\" available=\"true\" bid=\"$bid\">\n";
echo "<url>http://$cfg_url/{$js_main_page}/{$row['cat_name']}/{$row['product_alias']}</url>\n";
echo "<price>$product_price</price>\n";
// Валюта в которой указаны Ваши цены
echo "<currencyId>".$currency."</currencyId>\n";
echo "<categoryId>".$row['category_id']."</categoryId>\n";
if(!empty($row['product_full_image'])) {
echo "<picture>http://$cfg_url/components/com_jshopping/files/img_products/{$row['product_full_image']}</picture>\n";
}

// Возможность доставки
echo "<delivery>true</delivery> \n";
echo "<name>".htmlspecialchars(strip_tags($row['product_name']))."</name>\n";
echo "<description>".htmlspecialchars(strip_tags($row['product_s_desc']))."</description>\n";
for($i = 1; $i <= $extra_cnt; $i++) {
if(!empty($row['extra_field_'.$i])) {

//var_dump($row['extra_field_'.$i]);
echo "<param name=\"{$extra_info[$i]}\">".htmlspecialchars($extra_info_val[(int)$row['extra_field_'.$i]])."</param>\n";
}
}
echo "</offer>\n";
}
}


echo"</offers>\n";
echo"</shop>\n";
echo"</yml_catalog>\n";

} catch (Exception $e) {
    echo $e->getMessage();
}


function nomalizeArray($arr, $val, $key = 'id') {
$newArr = Array();
foreach($arr as $k => $v) {
$newArr[$v[$key]] = $v[$val];
}
return $newArr;
}
 
?>

Выдача вот такая:
Код
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<yml_catalog date="2013-08-08 19:42">
<shop>
<name>apple-land.ru</name>
<company>Apple-land.ru</company>
<url>lisap-shop.ru</url>
<currencies>
<currency id="RUR" rate="1"/>
<currency id="USD" rate="CBRF"/>
<currency id="EUR" rate="CBRF"/>
</currencies>
<categories>
<category id="1" parentId="174">Товары раз/category>
<category id="2" parentId="171">Товары два</category>
<category id="3">Товары три</category>
<category id="4" parentId="172">Товары тетыре</category>
</categories>
<offers></offers>
</shop>
</yml_catalog>
*

beagler

  • Живу я здесь
  • 3276
  • 392 / 4
  • https://alorisman.ru/
похоже что у Вас ни один товар не попадает в запрос. Надеюсь, в категориях товары есть.
перед
Код
$product_log = Array();
$res = $pdo->query($query);
напишите
Код
echo $query;
- увидите текст запроса - попробуйте его выполнить в phpMyAdmin - увидите есть выборка товаров или нет.
*

Shiffer

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
похоже что у Вас ни один товар не попадает в запрос. Надеюсь, в категориях товары есть.
перед
Код
$product_log = Array();
$res = $pdo->query($query);
напишите
Код
echo $query;
- увидите текст запроса - попробуйте его выполнить в phpMyAdmin - увидите есть выборка товаров или нет.

текст запроса вот такой:
Код
SELECT khc51_jshopping_products.product_id, khc51_jshopping_products.`name_ru-RU` as product_name, khc51_jshopping_manufacturers.`name_ru-RU` as mf_name, khc51_jshopping_manufacturers.`manufacturer_id`, khc51_jshopping_products_to_categories.`category_id`, khc51_jshopping_products.`product_price`, khc51_jshopping_products.`product_id` as product_sku, khc51_jshopping_products.`product_quantity`, khc51_jshopping_products.`product_full_image` as product_full_image, khc51_jshopping_products.`short_description_ru-RU` as product_s_desc FROM khc51_jshopping_products	 LEFT JOIN khc51_jshopping_products_to_categories ON khc51_jshopping_products.product_id = khc51_jshopping_products_to_categories.product_id LEFT JOIN khc51_jshopping_manufacturers ON khc51_jshopping_products.product_manufacturer_id = khc51_jshopping_manufacturers.manufacturer_id WHERE khc51_jshopping_products.product_publish='1' GROUP BY khc51_jshopping_products.product_id

phpMyAdmin по этому запросу выдаёт таблицу со всеми товарами и их параметрами. очень странно.. В чём тогда может быть ошибка?
*

Shiffer

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
Да, есть.
Пример строки выдачи:

"Столбец" "Значение"
product_id 2
product_name iPhone 4/4s черный
mf_name NULL
manufacturer_id NULL
category_id 2
product_price 190.000000
product_sku 2
product_quantity 1
product_full_image full_full_1333229389_342601825_1__Apple___1_.jpg
product_s_desc iPhone 4/4s
*

beagler

  • Живу я здесь
  • 3276
  • 392 / 4
  • https://alorisman.ru/
странно, вроде все условия выполняются.
А попробуйте вообще закомментировать условие
Код
if (!in_array($row['product_id'],$product_log) && ($row['product_price']) && $row['product_price'] > 0) {
и закомментировать } после
Код
echo "</offer>\n";
- поидее должен все вывалить
*

Shiffer

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
*

neonox

  • Захожу иногда
  • 62
  • 2 / 0
А подскажите и мне, пожалуйста.
После обновления магазина до 3.5.12 перестал работать импорт.

Вот мой скрипт.
Спойлер
[свернуть]

Вот страница выполнения
Спойлер
[свернуть]

Выдает ошибку
Цитировать
Fatal error: Call to a member function fetch() on a non-object in /var/www/u2853105/data/www/i-manit.ru/yamar/export.php on line 119

Идет вот такой запрос
Код
SELECT 
da8mz_jshopping_products.extra_field_1,
da8mz_jshopping_products.extra_field_2,
da8mz_jshopping_products.extra_field_3,
da8mz_jshopping_products.extra_field_4,
da8mz_jshopping_products.extra_field_5,
da8mz_jshopping_products.product_id,
da8mz_jshopping_products.`name_ru-RU` as product_name,
da8mz_jshopping_products.`alias_ru-RU` as product_alias,
da8mz_jshopping_manufacturers.`name_ru-RU` as mf_name,
da8mz_jshopping_manufacturers.`manufacturer_id`,
da8mz_jshopping_products.`product_price`,
da8mz_jshopping_products.`product_id` as product_sku,
da8mz_jshopping_products.`product_quantity`,
da8mz_jshopping_products.`product_full_image` as product_full_image,
da8mz_jshopping_products.`short_description_ru-RU` as product_s_desc,
da8mz_jshopping_products_to_categories.`category_id`,
da8mz_jshopping_categories.`alias_ru-RU` as cat_name FROM da8mz_jshopping_products LEFT JOIN da8mz_jshopping_products_to_categories ON da8mz_jshopping_products.product_id = da8mz_jshopping_products_to_categories.product_id LEFT JOIN da8mz_jshopping_categories ON da8mz_jshopping_products_to_categories.`category_id` = da8mz_jshopping_categories.category_id LEFT JOIN da8mz_jshopping_manufacturers ON da8mz_jshopping_products.product_manufacturer_id = da8mz_jshopping_manufacturers.manufacturer_id WHERE da8mz_jshopping_products.product_publish='1' GROUP BY da8mz_jshopping_products.product_id

В БД такой запрос не проходит, т.к. нету
Код
da8mz_jshopping_products.extra_field_1,da8mz_jshopping_products.extra_field_2

Не подскажите, как убрать их из скрипта и задать нужные колонки. Заранее благодарен.
*

tyrty_a

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Немного допилил код из первого поста под JoomShopping 4. Ссылки формируются для выключенного ЧПУ.
Валидацию Яндекса проходит.
Может кому пригодится.

Спойлер
[свернуть]
« Последнее редактирование: 11.09.2013, 21:15:49 от tyrty_a »
*

neonox

  • Захожу иногда
  • 62
  • 2 / 0
И снова я со своим прайсом((((
Честно, уже стыдно просить помощи, но все же.

Вот скрипт:
Спойлер
[свернуть]

Вот прайс:
Спойлер
[свернуть]

ЯМ выдает ошибку
Цитировать
Определена кодировка: utf-8 (строка 0, столбец 0)
Дата из файла: 2013-09-26 23:39 (строка 3, столбец 38)
Фатальная ошибка: Ошибка парсинга XML: Error parsing XML feed: No character data is allowed by content model (строка 598, столбец 1)
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Проблема в амперсанде в названиях категорий и/или товаров.
Для категорий надо заменить так:
Код
			$name = str_replace("&", "&amp;", $row_cat['name_ru-RU']);
echo "<category id=\"{$row_cat['category_id']}\"{$parent}>{$name}</category>\n";

Для товаров думаю разберетесь ;)
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

neonox

  • Захожу иногда
  • 62
  • 2 / 0
Linfuby, спасибо за ответ! Но увы, товар не осилил(((
К слову, у меня в названии товара нет амперсанда. Могу кинуть в личку прайс в excel
« Последнее редактирование: 29.09.2013, 23:57:27 от neonox »
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

юрий 009

  • Захожу иногда
  • 341
  • 5 / 1
Код
$bid = '10'; // Ставка за клик (в центах)
- я что-то не догоняю... что это волшебство не бесплатное?
*

nevigen

  • Moderator
  • 10436
  • 863 / 25
  • http://n*****n.com
Код
$bid = '10'; // Ставка за клик (в центах)
- я что-то не догоняю... что это волшебство не бесплатное?
:) но комент
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Импорт/экспорт

Автор apirat

Ответов: 903
Просмотров: 181199
Последний ответ 17.06.2022, 21:10:28
от marksetter
Интеграция с Yandex.Market (заказы)

Автор Mikle_Shaman

Ответов: 10
Просмотров: 1375
Последний ответ 27.04.2022, 10:14:17
от Mikle_Shaman
Импорт товаров в Яндекс.Объявления

Автор demll

Ответов: 1
Просмотров: 1402
Последний ответ 04.02.2021, 09:32:19
от khan-alex
Для настройки Яндекс Маркет

Автор stardel

Ответов: 6
Просмотров: 2620
Последний ответ 03.12.2019, 20:00:35
от zikkuratvk
Перенос товаров из магазнина на Joomla 2.5 на Joomla 3.9

Автор dron

Ответов: 3
Просмотров: 1688
Последний ответ 09.04.2019, 14:27:51
от nevigen