Новости Joomla

Как тестировать Joomla PHP-разработчику? Компонент Patch tester.

👩‍💻 Как тестировать Joomla PHP-разработчику? Компонент Patch tester.Joomla - open source PHP-фреймворк с готовой админкой. Его основная разработка ведётся на GitHub. Для того, чтобы международному сообществу разработчиков было удобнее тестировать Pull Requests был создан компонент Patch Tester, который позволяет "накатить" на текущую установку Joomla именно те изменения, которые необходимо протестировать. На стороне инфраструктуры Joomla для каждого PR собираются готовые пакеты, в которых находится ядро + предложенные изменения. В каждом PR обычно находятся инструкции по тестированию: куда зайти, что нажать, ожидаемый результат. Тестировщики могут предположить дополнительные сценарии, исходя из своего опыта и найти баги, о которых сообщить разработчику. Или не найти, и тогда улучшение или исправление ошибки быстрее войдёт в ядро Joomla. Напомню, что для того, чтобы PR вошёл в ядро Joomla нужны минимум 2 положительных теста от 2 участников сообщества, кроме автора. Видео на YouTubeВидео на VK ВидеоВидео на RuTubeКомпонент на GitHub https://github.com/joomla-extensions/patchtester@joomlafeed#joomla #php #webdev #community

Вышел релиз Revo PageBuilder Toolkit for YOOtheme Pro 1.6

Вышел релиз Revo PageBuilder Toolkit for YOOtheme Pro 1.6.2PageBuilder Toolkit - это специализированный плагин для конструктора страниц Yootheme Pro, содержит набор различных утилит для ускорения процесса работы и отладки макета, множественные улучшения в интерфейсе, включая поддержку dark mode, подсказки, быстрая смена разрешения в окне просмотра и много чего еще.v.1.6.2 Что нового?- Индикатор статусов: теперь не просто показывает состояние запросов, но и делает автоматические попытки их отправки при кратковременных сбоях в сети, а если это не помогло, то переводит конструктор в ручной режим, что позволяет сохранит макет и настройки темы прежде чем вы потеряете все, что было сделано с момента последнего сохранения- Подсветка ошибок в макете: плагин анализирует код страницы и может автоматически подсвечивать data атрибуты с кучей мусора, которые попадают в код страницы при копипасте из Figma в TinyMCE (пригодится для старых макетов, в текущей работе плагин сам очищает код мусора). Также есть подсветка семантических ошибок сборки - дубли h1 тега на странице и вложенных друг в друга заголовков.- Улучшена поддержка будущего релиза Yootheme Pro 5 и редактора CodeMirror 6Плагин для русскоязычных пользователей доступен в каталоге расширений SovMart и распространяется за символическую плату (100р). Разработчики Joomla расширений и партнеры автора могут получить плагин бесплатно.Для работы плагина необходим конструктор страниц Yootheme Pro.Разработчик плагина - участник нашего сообщества Александр Судьбинов (@alexrevo), член официальной группы поддержки Yootheme Pro. Страница расширенияОписание на сайте автора@joomlafeed#joomla #yootheme

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

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Пользуюсь коннектором от Дашука. У меня внутри родительского товара есть дочерние, категорией которых является сам родитель. Яндекс ругается на это, мол, не существует такой категории.
Вот решил приписать дочерей к категории родителя и заодно выводить цены с учетом скидки.
Может быть, велосипед изобрел, но все равно выкладываю код.
Код
<?php
//***********************************************************
//
// Версия коннектора к Yandex.Market от 18.04.2009
// автор доработок Саид Дашук (dashuk@ngs.ru)
//
// Доработки:
// 1. Подключение к настройкам Joomla (теперь не надо прописывать реквизиты доступа к БД,
//         а достаточно указать конфигурационный файл 'configuration.php')
// 2. Добавлены комментарии для новичков
// 3. ВЫБОРКА ВСЕХ ТОВАРОВ ПРОИСХОДИТ ОДНИМ ЗАПРОСОМ!
// 4. Добавлен шаблон для описания товара (тег <description>)
// 5. Курсы валют, приравнены к курсу ЦБРФ
// 6. Добавлены теги "доставка" и "производитель" (просто мне они нужны, а Вы решайте сами)
// а также: форматирование для удобства кода и вывода и еще что то по мелочам.
//
// Проверялось на Joomla! 1.5.9 Production/Stable / VirtueMart 1.1.2 stable
//
// а также:
// - прикрутить дочерние товары к категории родительского.
// - выводить цены с учетом скидки.
//
// Проверялось на Joomla! 1.5.26 / VirtueMart 1.1.3 robert'ом (nrobert@mail.ru)
//
//***********************************************************
 
 
// Пропишите относительный путь к 'configuration.php' (он находится в корне Joomla)
// Например: include '../configuration.php';
include 'configuration.php';
$cfg = new JConfig();
 
//NAME - Короткое название магазина (название, которое выводится в списке найденных на Яндекс.Маркете товаров.
//Не должно содержать более 20 символов). Нельзя использовать слова, не имеющие отношения к
//наименованию магазина ("лучший", "дешевый"), указывать номер телефона и т.п. Название магазина,
//должно совпадать с фактическим названием магазина, которое публикуется на сайте. При несоблюдении
//данного требования наименование может быть изменено Яндексом самостоятельно без уведомления Клиента.
$cfg_name = $cfg->fromname;
 
//Полное наименование компании, владеющей магазином. Не публикуется, используется для внутренней идентификации.
$cfg_company = $cfg->sitename;
 
//URL-адрес главной страницы магазина без http://
$cfg_url = 'мой_сайт.ru';
 
// Шаблон для описания товара
// Вместо {product_name} - будет вставлено наименование товара
// Вместо {product_desc} - будет вставлено краткое описание
// ПРИМЕР:
// $description_template = '{product_name} от производителя';
$description_template = '{product_desc}';
 
// Ставка за клик (в центах)
// $bid = '11';
 
 
$hostname = $cfg->host;
$username = $cfg->user;
$password = $cfg->password;
$dbName = $cfg->db;
$category = $cfg->dbprefix."vm_category";
$category_xref = $cfg->dbprefix."vm_category_xref";
$userstable = $cfg->dbprefix."vm_product";
$pricetable = $cfg->dbprefix."vm_product_price";
[color=red]$product_discount = $cfg->dbprefix."vm_product_discount";[/color]
$product_category_xref = $cfg->dbprefix."vm_product_category_xref";
 
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
mysql_select_db($dbName) or die(mysql_error());
 
// Исправьте, если у вас другая кодировка в БД
mysql_query('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";
$query_cat = "SELECT * FROM $category_xref";
$res_cat = mysql_query($query_cat) or die(mysql_error());
$rw=1;
while ($row_cat=mysql_fetch_array($res_cat)) {
$cat_parent_id=$row_cat['category_parent_id'];
$cat_child_id=$row_cat['category_child_id'];
$query2 = "SELECT category_name FROM $category WHERE category_id=".$row_cat['category_child_id'];
$res_cat1 = mysql_query($query2) or die(mysql_error());
$name_cat=mysql_fetch_array($res_cat1);
$cat_name=$name_cat['category_name'];
if ($cat_parent_id==0) {
echo"<category id=\"".$cat_child_id."\">".$cat_name."</category>\n";
}
else {
echo"<category id=\"".$cat_child_id."\" parentId=\"".$cat_parent_id."\">".$cat_name."</category>\n";
}
$rw++;
}
echo"</categories>\n";
 
// Секция описания товаров
echo"<offers>\n";
 
$tb_product = $cfg->dbprefix."vm_product";
$tb_manufacturer = $cfg->dbprefix."vm_manufacturer";
$tb_product_mf_xref = $cfg->dbprefix."vm_product_mf_xref";
$tb_category = $cfg->dbprefix."vm_category";
$tb_product_category_xref = $cfg->dbprefix."vm_product_category_xref";
$tb_price = $cfg->dbprefix."vm_product_price";
 
$query = "
SELECT
$tb_product.product_id,
[color=red]$tb_product.product_parent_id,[/color]
$tb_product.product_name,
$tb_manufacturer.mf_name,
$tb_manufacturer.manufacturer_id,
$tb_category.category_name,
$tb_category.category_id,
$tb_product_category_xref.category_id,
$tb_price.product_price,
[color=red]$tb_product.product_discount_id,[/color]
$tb_product.product_sku,
$tb_product.product_in_stock,
$tb_product.product_unit,
$tb_product.product_full_image,
$tb_product.product_s_desc,
$tb_product.product_weight
FROM
($tb_product_category_xref
RIGHT JOIN ($tb_price
RIGHT JOIN (($tb_product_mf_xref
RIGHT JOIN $tb_product
ON $tb_product_mf_xref.product_id = $tb_product.product_id)
LEFT JOIN $tb_manufacturer
ON $tb_product_mf_xref.manufacturer_id = $tb_manufacturer.manufacturer_id)
ON $tb_price.product_id = $tb_product.product_id)
ON $tb_product_category_xref.product_id = $tb_product.product_id)
LEFT JOIN $tb_category
ON $tb_product_category_xref.category_id = $tb_category.category_id
WHERE $tb_product.product_publish='Y'
";
 
$row = d2a($query);
$product_log = Array();
for($i=0;$i<count($row);$i++) {
if (!in_array($row[$i]['product_id'],$product_log) AND ($row[$i]['product_price'])) {
$product_log[] = $row[$i]['product_id'];
 
$url="http://$cfg_url/index.php?page=shop.product_details&amp;flypage=shop.flypage&amp;option=com_virtuemart&amp;product_id=".$row[$i]['product_id'];
//$url="http://$cfg_url/client?page=shop.product_details&flypage=flypage-ask.tpl&product_id=".$row[$i]['product_id']."&category_id=".$row[$i]['category_id']."&manufacturer_id=".$row[$i]['manufacturer_id'];
 
$product_full_image = "http://$cfg_url/components/com_virtuemart/shop_image/product/".$row[$i]['product_full_image'];
$tags = Array ('{product_name}','{product_desc}');
$repl = Array ($row[$i]['product_name'],$row[$i]['product_s_desc']);
[color=red]$query3 = "SELECT amount FROM $product_discount WHERE discount_id = ".$row[$i]['product_discount_id'];
$res_discount = mysql_query($query3) or die(mysql_error());
$fetch_discount = mysql_fetch_array($res_discount);
$discount_amount = $fetch_discount['amount'];
if($discount_amount == 0) {
$product_price = substr($row[$i]['product_price'], 0, -3);
} else {
$product_price = substr($row[$i]['product_price'], 0, -3) - $discount_amount;
}
$query4 = "SELECT category_id FROM $product_category_xref WHERE product_id = ".$row[$i]['product_parent_id'];
$res_cat2 = mysql_query($query4) or die(mysql_error());
$id_cat=mysql_fetch_array($res_cat2);
$cat_id=$id_cat['category_id'];
if($row[$i]['category_id']) {
$product_cat_id=$row[$i]['category_id'];
} else {
$product_cat_id=$cat_id;
}[/color]
// echo"\n<offer id=\"".$row[$i]['product_id']."\" available=\"true\" bid=\"$bid\">\n";
echo"\n<offer id=\"".$row[$i]['product_id']."\" available=\"true\">\n";
echo"<url>".$url."</url>\n";
echo"<price>$product_price</price>\n";
// Валюта в которой указаны Ваши цены
echo"<currencyId>RUR</currencyId>\n";
echo"<categoryId>".$product_cat_id."</categoryId>\n";
echo"<picture>".$product_full_image ."</picture>\n";
// Возможность доставки
echo"<delivery>true</delivery> \n";
echo"<name>".strip_tags($row[$i]['product_name'])."\"</name>\n";
echo"<description>".strip_tags(str_replace($tags,$repl,$description_template))."</description>\n";
echo"</offer>\n";
}
}
 
echo"</offers>\n";
echo"</shop>\n";
echo"</yml_catalog>\n";
 
function d2a($query){
    $result = mysql_query($query) or die("Query failed : " . mysql_error());
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {$res[] = $line;}
    mysql_free_result($result);
    return $res;
}
 
?>
Надеюсь, кому-то пригодится.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Извините, сдуру добавил теги [color] в код.
Вот рабочий код
Код
<?php
//***********************************************************
//
// Версия коннектора к Yandex.Market от 18.04.2009
// автор доработок Саид Дашук (dashuk@ngs.ru)
//
// Доработки:
// 1. Подключение к настройкам Joomla (теперь не надо прописывать реквизиты доступа к БД,
//         а достаточно указать конфигурационный файл 'configuration.php')
// 2. Добавлены комментарии для новичков
// 3. ВЫБОРКА ВСЕХ ТОВАРОВ ПРОИСХОДИТ ОДНИМ ЗАПРОСОМ!
// 4. Добавлен шаблон для описания товара (тег <description>)
// 5. Курсы валют, приравнены к курсу ЦБРФ
// 6. Добавлены теги "доставка" и "производитель" (просто мне они нужны, а Вы решайте сами)
// а также: форматирование для удобства кода и вывода и еще что то по мелочам.
//
// Проверялось на Joomla! 1.5.9 Production/Stable / VirtueMart 1.1.2 stable
//
// а также:
// - прикрутить дочерние товары к категории родительского.
// - выводить цены с учетом скидки.
//
// Проверялось на Joomla! 1.5.26 / VirtueMart 1.1.3 robert'ом (nrobert@mail.ru)
//
//***********************************************************
 
 
// Пропишите относительный путь к 'configuration.php' (он находится в корне Joomla)
// Например: include '../configuration.php';
include 'configuration.php';
$cfg = new JConfig();
 
//NAME - Короткое название магазина (название, которое выводится в списке найденных на Яндекс.Маркете товаров.
//Не должно содержать более 20 символов). Нельзя использовать слова, не имеющие отношения к
//наименованию магазина ("лучший", "дешевый"), указывать номер телефона и т.п. Название магазина,
//должно совпадать с фактическим названием магазина, которое публикуется на сайте. При несоблюдении
//данного требования наименование может быть изменено Яндексом самостоятельно без уведомления Клиента.
$cfg_name = $cfg->fromname;
 
//Полное наименование компании, владеющей магазином. Не публикуется, используется для внутренней идентификации.
$cfg_company = $cfg->sitename;
 
//URL-адрес главной страницы магазина без http://
$cfg_url = 'мой_сайт.ru';
 
// Шаблон для описания товара
// Вместо {product_name} - будет вставлено наименование товара
// Вместо {product_desc} - будет вставлено краткое описание
// ПРИМЕР:
// $description_template = '{product_name} от производителя';
$description_template = '{product_desc}';
 
// Ставка за клик (в центах)
// $bid = '11';
 
 
$hostname = $cfg->host;
$username = $cfg->user;
$password = $cfg->password;
$dbName = $cfg->db;
$category = $cfg->dbprefix."vm_category";
$category_xref = $cfg->dbprefix."vm_category_xref";
$userstable = $cfg->dbprefix."vm_product";
$pricetable = $cfg->dbprefix."vm_product_price";
$product_discount = $cfg->dbprefix."vm_product_discount";
$product_category_xref = $cfg->dbprefix."vm_product_category_xref";
 
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
mysql_select_db($dbName) or die(mysql_error());
 
// Исправьте, если у вас другая кодировка в БД
mysql_query('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";
$query_cat = "SELECT * FROM $category_xref";
$res_cat = mysql_query($query_cat) or die(mysql_error());
$rw=1;
while ($row_cat=mysql_fetch_array($res_cat)) {
$cat_parent_id=$row_cat['category_parent_id'];
$cat_child_id=$row_cat['category_child_id'];
$query2 = "SELECT category_name FROM $category WHERE category_id=".$row_cat['category_child_id'];
$res_cat1 = mysql_query($query2) or die(mysql_error());
$name_cat=mysql_fetch_array($res_cat1);
$cat_name=$name_cat['category_name'];
if ($cat_parent_id==0) {
echo"<category id=\"".$cat_child_id."\">".$cat_name."</category>\n";
}
else {
echo"<category id=\"".$cat_child_id."\" parentId=\"".$cat_parent_id."\">".$cat_name."</category>\n";
}
$rw++;
}
echo"</categories>\n";
 
// Секция описания товаров
echo"<offers>\n";
 
$tb_product = $cfg->dbprefix."vm_product";
$tb_manufacturer = $cfg->dbprefix."vm_manufacturer";
$tb_product_mf_xref = $cfg->dbprefix."vm_product_mf_xref";
$tb_category = $cfg->dbprefix."vm_category";
$tb_product_category_xref = $cfg->dbprefix."vm_product_category_xref";
$tb_price = $cfg->dbprefix."vm_product_price";
 
$query = "
SELECT
$tb_product.product_id,
$tb_product.product_parent_id,
$tb_product.product_name,
$tb_manufacturer.mf_name,
$tb_manufacturer.manufacturer_id,
$tb_category.category_name,
$tb_category.category_id,
$tb_product_category_xref.category_id,
$tb_price.product_price,
$tb_product.product_discount_id,
$tb_product.product_sku,
$tb_product.product_in_stock,
$tb_product.product_unit,
$tb_product.product_full_image,
$tb_product.product_s_desc,
$tb_product.product_weight
FROM
($tb_product_category_xref
RIGHT JOIN ($tb_price
RIGHT JOIN (($tb_product_mf_xref
RIGHT JOIN $tb_product
ON $tb_product_mf_xref.product_id = $tb_product.product_id)
LEFT JOIN $tb_manufacturer
ON $tb_product_mf_xref.manufacturer_id = $tb_manufacturer.manufacturer_id)
ON $tb_price.product_id = $tb_product.product_id)
ON $tb_product_category_xref.product_id = $tb_product.product_id)
LEFT JOIN $tb_category
ON $tb_product_category_xref.category_id = $tb_category.category_id
WHERE $tb_product.product_publish='Y'
";
 
$row = d2a($query);
$product_log = Array();
for($i=0;$i<count($row);$i++) {
if (!in_array($row[$i]['product_id'],$product_log) AND ($row[$i]['product_price'])) {
$product_log[] = $row[$i]['product_id'];
 
$url="http://$cfg_url/index.php?page=shop.product_details&amp;flypage=shop.flypage&amp;option=com_virtuemart&amp;product_id=".$row[$i]['product_id'];
//$url="http://$cfg_url/client?page=shop.product_details&flypage=flypage-ask.tpl&product_id=".$row[$i]['product_id']."&category_id=".$row[$i]['category_id']."&manufacturer_id=".$row[$i]['manufacturer_id'];
 
$product_full_image = "http://$cfg_url/components/com_virtuemart/shop_image/product/".$row[$i]['product_full_image'];
$tags = Array ('{product_name}','{product_desc}');
$repl = Array ($row[$i]['product_name'],$row[$i]['product_s_desc']);
$query3 = "SELECT amount FROM $product_discount WHERE discount_id = ".$row[$i]['product_discount_id'];
$res_discount = mysql_query($query3) or die(mysql_error());
$fetch_discount = mysql_fetch_array($res_discount);
$discount_amount = $fetch_discount['amount'];
if($discount_amount == 0) {
$product_price = substr($row[$i]['product_price'], 0, -3);
} else {
$product_price = substr($row[$i]['product_price'], 0, -3) - $discount_amount;
}
$query4 = "SELECT category_id FROM $product_category_xref WHERE product_id = ".$row[$i]['product_parent_id'];
$res_cat2 = mysql_query($query4) or die(mysql_error());
$id_cat=mysql_fetch_array($res_cat2);
$cat_id=$id_cat['category_id'];
if($row[$i]['category_id']) {
$product_cat_id=$row[$i]['category_id'];
} else {
$product_cat_id=$cat_id;
}
// echo"\n<offer id=\"".$row[$i]['product_id']."\" available=\"true\" bid=\"$bid\">\n";
echo"\n<offer id=\"".$row[$i]['product_id']."\" available=\"true\">\n";
echo"<url>".$url."</url>\n";
echo"<price>$product_price</price>\n";
// Валюта в которой указаны Ваши цены
echo"<currencyId>RUR</currencyId>\n";
echo"<categoryId>".$product_cat_id."</categoryId>\n";
echo"<picture>".$product_full_image ."</picture>\n";
// Возможность доставки
echo"<delivery>true</delivery> \n";
echo"<name>".strip_tags($row[$i]['product_name'])."\"</name>\n";
echo"<description>".strip_tags(str_replace($tags,$repl,$description_template))."</description>\n";
echo"</offer>\n";
}
}
 
echo"</offers>\n";
echo"</shop>\n";
echo"</yml_catalog>\n";
 
function d2a($query){
    $result = mysql_query($query) or die("Query failed : " . mysql_error());
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {$res[] = $line;}
    mysql_free_result($result);
    return $res;
}
 
?>
Не будь паразитом, сделай что-нибудь самостоятельно!
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Строки 172, 173, 174, 176 лишние.
Из
Код
if($discount_amount == 0) {
$product_price = substr($row[$i]['product_price'], 0, -3);
} else {
$product_price = substr($row[$i]['product_price'], 0, -3) - $discount_amount;
}
оставьте только
Код
		$product_price = substr($row[$i]['product_price'], 0, -3) - $discount_amount;
Не будь паразитом, сделай что-нибудь самостоятельно!
*

faraon_x

  • Захожу иногда
  • 362
  • 27 / 1
  • Чем смогу, тем помогу )))
Всем привет!
Подскажите кто сделал все таки, чтобы в категории у дочернего товара выводились id категории и описание родительского товара (или что-нибудь одно, второе сделаю по аналогии)?
Код
<?php
//Пропишите для своей БД, пропишите наименование магазина, про адрес www.**********.ru тоже не забудьте
$hostname = "########";
$username = "########";
$password = "########";
$dbName = "########";
$category = "jos_vm_category";
$category_xref = "jos_vm_category_xref";
$userstable = "jos_vm_product";
$pricetable = "jos_vm_product_price";

$product_category_xref =  "jos_vm_product_category_xref";
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
mysql_select_db($dbName) or die(mysql_error());
//mysql_query('set names utf8');

include '../configuration.php';

$cfg = new JConfig();


echo"<?xml version='1.0' encoding='windows-1251'?>\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>############</name>\n";
echo"<company>########</company>\n";
echo"<url>###########</url>\n";
echo"<currencies>\n";
echo"<currency  id=\"RUR\" rate=\"1\"/>\n";
echo"<currency  id=\"USD\" rate=\"CBRF\"/>\n";
echo"</currencies>\n";
echo"<categories>\n";
$query_cat = "SELECT * FROM $category_xref";
$res_cat = mysql_query($query_cat) or die(mysql_error());
$rw=1;
while ($row_cat=mysql_fetch_array($res_cat)) {
$cat_parent_id=$row_cat['category_parent_id'];
$cat_child_id=$row_cat['category_child_id'];
$query2 = "SELECT category_name FROM $category WHERE category_id=".$row_cat['category_child_id'];
$res_cat1 = mysql_query($query2) or die(mysql_error());
$name_cat=mysql_fetch_array($res_cat1);
$cat_name=htmlspecialchars($name_cat['category_name']);
if ($cat_parent_id==0) {
echo"<category id=\"".$cat_child_id."\">".$cat_name."</category>\n";
}
else {
echo"<category id=\"".$cat_child_id."\" parentId=\"".$cat_parent_id."\">".$cat_name."</category>\n";
}
$rw++;
}
echo"</categories>\n";

echo"<offers>\n";



$tb_product = $cfg->dbprefix."vm_product";

$tb_manufacturer = $cfg->dbprefix."vm_manufacturer";

$tb_product_mf_xref = $cfg->dbprefix."vm_product_mf_xref";

$tb_category = $cfg->dbprefix."vm_category";

$tb_product_category_xref = $cfg->dbprefix."vm_product_category_xref";

$tb_price = $cfg->dbprefix."vm_product_price";



$query = "

SELECT

$tb_product.product_id,

$tb_product.product_name,

$tb_manufacturer.mf_name,

$tb_manufacturer.manufacturer_id,

$tb_category.category_name,

$tb_category.category_id,

$tb_product_category_xref.category_id,

$tb_price.product_price,

$tb_product.product_sku,

$tb_product.product_in_stock,

$tb_product.product_unit,

$tb_product.product_full_image,

$tb_product.product_desc,

$tb_product.product_weight

FROM

($tb_product_category_xref

RIGHT JOIN ($tb_price

RIGHT JOIN (($tb_product_mf_xref

RIGHT JOIN $tb_product

ON $tb_product_mf_xref.product_id = $tb_product.product_id)

LEFT JOIN $tb_manufacturer

ON $tb_product_mf_xref.manufacturer_id = $tb_manufacturer.manufacturer_id)

ON $tb_price.product_id = $tb_product.product_id)

ON $tb_product_category_xref.product_id = $tb_product.product_id)

LEFT JOIN $tb_category

ON $tb_product_category_xref.category_id = $tb_category.category_id

WHERE $tb_product.product_publish='Y'and $tb_price.product_price > 0 and $tb_product.product_parent_id > 0 and $tb_product.product_in_stock > 0

";



$row = d2a($query);

$product_log = Array();

for($i=0;$i<count($row);$i++) {

if (!in_array($row[$i]['product_id'],$product_log) AND ($row[$i]['product_price'])) {

$product_log[] = $row[$i]['product_id'];




$url="########/index.php?page=shop.product_details&amp;option=com_virtuemart&amp;flypage=flypage.tpl&amp;product_id=".$row[$i]['product_id'];



$product_full_image = "########/components/com_virtuemart/shop_image/product/".$row[$i]['product_full_image'];

$tags = Array ('{product_name}','{product_desc}');

$repl = Array ($row[$i]['product_name'],$row[$i]['product_desc']);

$product_price = substr($row[$i]['product_price'], 0, -3);

$product_cat_id=$row[$i]['category_id'];

echo"\n<offer id=\"".$row[$i]['product_id']."\" available=\"true\" bid=\"$bid\">\n";

echo"<url>".$url."</url>\n";

echo"<price>$product_price</price>\n";

// Валюта в которой указаны Ваши цены

echo"<currencyId>RUR</currencyId>\n";

echo"<categoryId>".$product_cat_id."</categoryId>\n";

echo"<picture>".$product_full_image ."</picture>\n";

// Возможность доставки

echo"<delivery>true</delivery> \n";

echo"<name>".HtmlSpecialChars(strip_tags($row[$i]['product_name']))."\"</name>\n";

echo"<description>".HtmlSpecialChars(strip_tags(str_replace($tags,$repl,$description_template)))."</description>\n";

echo"</offer>\n";

}

}



echo"</offers>\n";
echo"</shop>\n";
echo"</yml_catalog>\n";
function d2a($query){

    $result = mysql_query($query) or die("Query failed : " . mysql_error());

    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {$res[] = $line;}

    mysql_free_result($result);

    return $res;

}


?>
« Последнее редактирование: 09.12.2012, 15:26:18 от faraon_x »
Вопросы по JFORMS, можно ещё попробовать задать здесь
Российский 3d сканер от разработчиков и производителей
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Повнимательнее читайте
Пользуюсь коннектором от Дашука. У меня внутри родительского товара есть дочерние, категорией которых является сам родитель. Яндекс ругается на это, мол, не существует такой категории.
Вот решил приписать дочерей к категории родителя и заодно выводить цены с учетом скидки.
Может быть, велосипед изобрел, но все равно выкладываю код.
Код
	$tb_product.product_parent_id,
...
$query4 = "SELECT category_id FROM $product_category_xref WHERE product_id = ".$row[$i]['product_parent_id'];
$res_cat2 = mysql_query($query4) or die(mysql_error());
$id_cat=mysql_fetch_array($res_cat2);
$cat_id=$id_cat['category_id'];
if($row[$i]['category_id']) {
$product_cat_id=$row[$i]['category_id'];
} else {
$product_cat_id=$cat_id;
}
Надеюсь, кому-то пригодится.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

faraon_x

  • Захожу иногда
  • 362
  • 27 / 1
  • Чем смогу, тем помогу )))
Читал с первой страницы, видимо глаз замылился. Спасибо за наводку, попробую. +1
Вопросы по JFORMS, можно ещё попробовать задать здесь
Российский 3d сканер от разработчиков и производителей
*

Helen74

  • Новичок
  • 8
  • 0 / 0
Подскажите пожалуйста, отправила ссылку на YML файл для добавления в каталог, приняли, но потом написали что цена на все товары стоит 0, хотя на сайте все с ценами. Где искать ошибку? Joomla 1.5.20, VirtueMart 1.1.5 stable. Изините если мало данных я чайник!
« Последнее редактирование: 18.12.2012, 16:33:40 от Helen74 »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Подскажите пожалуйста, отправила ссылку на YML файл для добавления в каталог, приняли, но потом написали что цена на все товары стоит 0, хотя на сайте все с ценами. Где искать ошибку? Joomla 1.5.20, VirtueMart 1.1.5 stable. Изините если мало данных я чайник!
Ищите в файле YML.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Helen74

  • Новичок
  • 8
  • 0 / 0
Ищите в файле YML.
А не подскажите где именно ошибка? Спасибо.
Код
<?php
$hostname = "хххххх";
$username = "ххххх";
$password = "хххх";
$dbName = "ххххх";
$category = "jos_vm_category";
$category_xref = "jos_vm_category_xref";
$manufacturer_xref = "jos_vm_product_mf_xref";
$manufacturer = "jos_vm_manufacturer";
$userstable = "jos_vm_product";
$pricetable = "jos_vm_product_price";
$product_category_xref =  "jos_vm_product_category_xref";

//Определяем сегодняшнюю дату в формате, который используется на сайте cbr.ru
$date = date("d/m/Y");
//Определим код нашей валюты на сайте cbr.ru
//Евро
//$code='R01239';
//Выполняем первый пункт, считываем страницу с курсами валют в переменную
//$file = file_get_contents("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date);
//Разбираем страницу с помощью регулярок:
/*preg_match("#<Valute ID=\"" . $code . "\".*?>(.*?)</Valute>#is", $file, $m);
preg_match("#<Value>(.*?)</Value>#is", $m[1], $r);
//Запятую, отделяющую дробную часть заменяем на точку, и у нас в переменной $euro находится курс евро.
$euro = str_replace(",", ".", $r[1]);
//$euro = "1";*/

mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
mysql_query( "set session character_set_server=utf8;");
mysql_query( "set session character_set_database=utf8;");
mysql_query( "set session character_set_connection=utf8;");
mysql_query( "set session character_set_results=utf8;");
mysql_query( "set session character_set_client=utf8;");
mysql_select_db($dbName) or die(mysql_error());
echo"<?xml version=\"1.0\" encoding=\"utf8\"?>\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>xn--80apfaecrdir6f2b6a.xn--p1ai</name>\n";

echo"<company>xn--80apfaecrdir6f2b6a.xn--p1ai</company>\n";
echo"<url>xn--80apfaecrdir6f2b6a.xn--p1ai</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"<currency id=\"EUR\" rate=\"1\"/>\n";
echo"</currencies>\n";

echo"<categories>\n";

$query_cat = "SELECT * FROM $category_xref";
$res_cat = mysql_query($query_cat) or die(mysql_error());
$rw=1;

while ($row_cat=mysql_fetch_array($res_cat)) {
$cat_parent_id=$row_cat['category_parent_id'];
$cat_child_id=$row_cat['category_child_id'];
$query2 = "SELECT category_name FROM $category WHERE category_id=".$row_cat['category_child_id'];
$res_cat1 = mysql_query($query2) or die(mysql_error());
$name_cat=mysql_fetch_array($res_cat1);
$cat_name=$name_cat['category_name'];
if ($cat_parent_id==0) {
echo"<category id=\"".$cat_child_id."\">".$cat_name."</category>\n";
}

else {
echo"<category id=\"".$cat_child_id."\" parentId=\"".$cat_parent_id."\">".$cat_name."</category>\n";
}

$rw++;

}

echo"</categories>\n";


echo"<offers>\n";
$query = "SELECT * FROM $userstable WHERE product_publish='Y'";
$res = mysql_query($query) or die(mysql_error());
$rw=1;

while ($row=mysql_fetch_array($res)) {

$url="http://xn--80apfaecrdir6f2b6a.xn--p1ai/index.php?option=com_virtuemart&amp;flypage=flypage.tpl&amp;page=shop.product_details&amp;product_id=".$row['product_id'];

if ($row['product_full_image'] != "")
{
    $product_full_image = "http://xn--80apfaecrdir6f2b6a.xn--p1ai/components/com_virtuemart/shop_image/product/".$row['product_full_image'];
}
else
{
    $product_full_image = "http://xn--80apfaecrdir6f2b6a.xn--p1ai/components/com_virtuemart/shop_image/product/noimage.gif";
}

$vowels = array("=", "-", "+", "&");

$product_name = $row['product_name'];
$product_name = strip_tags(str_replace($vowels," ",(trim("$product_name"))));

$product_desc = $row['product_desc'];
$product_desc = strip_tags(str_replace($vowels," ",(trim("$product_desc"))));

$product_s_desc = $row['product_s_desc'];
$product_s_desc = strip_tags(str_replace($vowels," ",(trim("$product_s_desc"))));

$query1 = "SELECT product_price FROM $pricetable WHERE product_id=".$row['product_id'];
$res1 = mysql_query($query1) or die(mysql_error());
$price=mysql_fetch_array($res1);
$product_price = (substr($price['product_price'], 0, -3)) * $euro;

$query3 = "SELECT category_id FROM $product_category_xref WHERE product_id=".$row['product_id'];
$res3 = mysql_query($query3) or die(mysql_error());
$product_cat_id=mysql_fetch_array($res3);
$product_cat_id=$product_cat_id['category_id'];

$query4 = "SELECT manufacturer_id FROM $manufacturer_xref WHERE product_id=".$row['product_id'];
$res4 = mysql_query($query4) or die(mysql_error());
$manufacturer_id1=mysql_fetch_array($res4);
$manufacturer_id=$manufacturer_id1['manufacturer_id'];

$query5 = "SELECT mf_name FROM $manufacturer WHERE manufacturer_id=$manufacturer_id";
$res5 = mysql_query($query5) or die(mysql_error());
$manufacturer_name1=mysql_fetch_array($res5);
$manufacturer_name=$manufacturer_name1['mf_name'];

/* if ($manufacturer_id==27 || $manufacturer_id==32 || $manufacturer_id==32 || $manufacturer_id==24 || $manufacturer_id==33 || $manufacturer_id==35 || $manufacturer_id==26 || $manufacturer_id==25 || $manufacturer_id==30 || $manufacturer_id==28 || $manufacturer_id==29) {
*/ echo"<offer id=\"".$rw."\" available=\"true\" bid=\"11\">\n";
echo"<url>".$url."</url>\n";
echo"<price>".$product_price."</price>\n";
echo"<currencyId>RUR</currencyId>\n";
echo"<categoryId>".$product_cat_id."</categoryId>\n";
echo"<picture>".$product_full_image."</picture>\n";
echo"<delivery>true</delivery>\n";
echo"<name>".$product_name."</name>\n";
echo"<vendor>".$manufacturer_name."</vendor>\n";
echo"<description>".$product_s_desc." ".$product_desc."</description>\n";
echo"</offer>\n";
/* }*/

$rw++;
}

echo"</offers>\n";
echo"</shop>\n";
echo"</yml_catalog>\n";
?>
« Последнее редактирование: 18.12.2012, 17:40:35 от Helen74 »
*

Helen74

  • Новичок
  • 8
  • 0 / 0
Жду помощи, спасибо.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Видимо, у вас курс евро не определился. Если цены только в рублях, то просто уберите из
Код
$product_price = (substr($price['product_price'], 0, -3)) * $euro;
курс евро
Код
$product_price = (substr($price['product_price'], 0, -3));
Все должно заработать.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Helen74

  • Новичок
  • 8
  • 0 / 0
Видимо, у вас курс евро не определился. Если цены только в рублях, то просто уберите из
Код
$product_price = (substr($price['product_price'], 0, -3)) * $euro;
курс евро
Код
$product_price = (substr($price['product_price'], 0, -3));
Все должно заработать.
Спасибо большое, всё заработало! +1
P.S Не знаю как плюсик в репутацию добавлять(
*

gelx

  • Осваиваюсь на форуме
  • 42
  • 1 / 1
Извините, сдуру добавил теги [color] в код.
Вот рабочий код
Код
...

Выдается ошибка при проверке на маркете:

Предупреждение: Кодировка XML не определена (строка 0, столбец 0)
Фатальная ошибка: Ошибка парсинга XML: Error parsing XML feed: Invalid document structure (строка 50, столбец 48)


Joomla 1.5.26, VM 1.1.9
кодировка базы utf8
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Выдается ошибка при проверке на маркете:

Предупреждение: Кодировка XML не определена (строка 0, столбец 0)
Фатальная ошибка: Ошибка парсинга XML: Error parsing XML feed: Invalid document structure (строка 50, столбец 48)


Joomla 1.5.26, VM 1.1.9
кодировка базы utf8
Соответствующую запись в .htaccess сделали?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

gelx

  • Осваиваюсь на форуме
  • 42
  • 1 / 1
Соответствующую запись в .htaccess сделали?
Точно! Не сделал...  ^-^
Уже установил и настроил компонент из этой темы: http://joomlaforum.ru/index.php/topic,164538.msg889184.html#msg889184

Но все-равно спасибо!
*

rpex

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
robert, Я.Маркет ругается:
Цитировать
Определена кодировка: utf-8 (строка 0, столбец 0)
Дата из файла: 2013-01-29 01:16 (строка 3, столбец 38)
Фатальная ошибка: Ошибка парсинга XML: Error parsing XML feed: Unterminated entity reference, 'D' (строка 41, столбец 36)
Как исправить? Сайт в UTF-8 в скрипте тоже, названия сайта скрипт берет из Joomla я так понял, сам не писал описания. В личку отправил подробности.
По строке столбцу:
<category id="29" parentid="12">C&amp;D Technologies</category>

Вроде так и должно быть... Не пойму...

В итоге дело в знаке & но при замене на &amp;все равно ругается, а если убрать знак & то Яндекс пропускает, как решить?

Пока просто поубирал & и следующие ошибки такого рода:
Цитировать
Ошибка: Значения тегов delivery/pickup/store не соответствуют типу магазина (строка 5046, столбец 10)
Ошибка: Предложение отклонено: http://test.ru/index.php?page=shop.product_details&flypage=shop.flypage&option=com_virtuemart&product_id=52 (строка 228, столбец 9)
« Последнее редактирование: 29.01.2013, 02:10:18 от rpex »
*

rpex

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Вот блин, еще и все ссылки без SEF, как поправить?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Вот рабочий вариант, которым сам пользуюсь. Добавлено:
- Прикрутить дочерние товары к категории родительского.
- Выводить цены с учетом скидки.
- Решить проблему "Error parsing XML feed: Unterminated entity reference", связанную с знаком "&" в названиях категории и товаров.
- Динамически определить наличие товаров.
- Динамически определить минимальную сумму покупки.
Спойлер
[свернуть]
« Последнее редактирование: 29.01.2013, 17:29:15 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

rpex

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Ошибка с этим скриптом еще круче:
Цитировать
Определена кодировка: iso-8859-5 (строка 0, столбец 0)
Фатальная ошибка: Заявленная кодировка XML ( utf-8) не соответствует действительной ( iso-8859-5)

Хотя в скрипте utf-8 же стоит у тебя.
*

terr

  • Давно я тут
  • 824
  • 14 / 6
  • Ученик html-я
Задача стоит написать проверку колчичества товара и если оно ровно -1 то не выводить в Яндекс маркете набросал примерный код но он не работает, пните а?

Код
$available = 'false';
$quant = (int)$row['product_in_stock'];
if ($quant) {
$available = 'true';
}

$available = "true";
if ($product_in_stock = -1) $available = "false";
*

Alex Revo

  • Завсегдатай
  • 1995
  • 109 / 0
$available = 'false';
$quant = int($row['product_in_stock']);
if ($quant== -1) $available = "false"; else $available = 'true';
*

terr

  • Давно я тут
  • 824
  • 14 / 6
  • Ученик html-я
$available = 'false';
$quant = int($row['product_in_stock']);
if ($quant== -1) $available = "false"; else $available = 'true';

Код
Определена кодировка: windows-1251 (строка 0, столбец 0)
Дата из файла: 2014-01-16 20:13 (строка 3, столбец 38)
Фатальная ошибка: Ошибка парсинга XML: Error parsing XML feed: Unknown element 'br' (строка 138, столбец 4)

Не сконало

А вот в таком виде парсит но на сколько рабочий вариант еще не знаю

Код
$available = 'false';
$quant = (int)$row['product_in_stock'];
if ($quant== -1) $available = "false"; else $available = 'true';


{
$available = 'true';
}
*

Alex Revo

  • Завсегдатай
  • 1995
  • 109 / 0
Не сконало потому что тег <br/> где-то затесался вне XML кода.
*

terr

  • Давно я тут
  • 824
  • 14 / 6
  • Ученик html-я
Не сконало потому что тег <br/> где-то затесался вне XML кода.

Мой варент не работает так -как я индесирует эту позицию, а как найти тег br  я видел это но ненашел

у меня вся выгрузка это 1 php файл
*

Alex Revo

  • Завсегдатай
  • 1995
  • 109 / 0
Яндекс индексирует все позиции, признак available передает только информацию товар в наличии или под заказ.

Цитировать
В атрибуте available указывается статус доступности товара:
• false — товарное предложение на заказ. Магазин готов принять заказ и осуществить поставку товара в течение согласованного с покупателем срока, не превышающего двух месяцев (за исключением товаров, изготавливаемых на заказ, ориентировочный срок поставки которых оговаривается с покупателем во время заказа).
• true — товарное предложение в наличии. Магазин готов сразу договариваться с покупателем о доставке/покупке товара.

Если вы не хотите передавать в Яндекс заказные позиции нужно делать проверку остатков перед формированием тега offer.
*

terr

  • Давно я тут
  • 824
  • 14 / 6
  • Ученик html-я
Нужно сделать если остаток -1 то чтоб Яндекс этот товар не индексировал и не выводил в я маркет а на сайте чтоб можно было его отобразить и продать через корзинку
*

Alex Revo

  • Завсегдатай
  • 1995
  • 109 / 0
Тогда нужно просто всю часть кода с формированием offer заключить в условие
if ($row['product_in_stock']) {
вывод тега оффер и товарного предложения
}

Выгружаете файл и смотрите, там должны быть позиции только в наличии.
Атрибут available в offer везде можно оставить как true, без доп.проверок.
*

terr

  • Давно я тут
  • 824
  • 14 / 6
  • Ученик html-я
Тогда нужно просто всю часть кода с формированием offer заключить в условие
if ($row['product_in_stock']) {
вывод тега оффер и товарного предложения
}

Выгружаете файл и смотрите, там должны быть позиции только в наличии.
Атрибут available в offer везде можно оставить как true, без доп.проверок.

Дак в том то и дело что с обработкой в наличии проблем нет, нужно именно исключить из прасинга яндексом товарс с кол. -1 тоесть одно четкое количество товара) а под заказ и в наличии от 0 и ++++ чтоб Яндекс парсил товар и выгружал на маркет
*

Alex Revo

  • Завсегдатай
  • 1995
  • 109 / 0
if ($row['product_in_stock']>-1) {
вывод тега оффер и товарного предложения
}
*

stas12

  • Осваиваюсь на форуме
  • 13
  • 1 / 0
Подскажите, столкнулся с проблемой. с сайта идет выгрузка XML на aukro
При добавлении новой категории товаров в VirtueMart, сбивается привязка по категориям на аукро и получается каша.
В настройках VirtueMart смотрел - для новой категории создается новый id. По идее на аукро только должны подвязать новую категорию с нашего сайта к своим категориям.
А у меня получается когда я создаю новую категорию, допустим "Носки" - на аукро она получает id "Трусов". А товары из категории "Трусы" получают id категории "Куртки".
Получается новым категориям присваивается рандомный id уже существующих категорий, а как сделать что новая категория получала новый id и не замещала уже существующий? спасибо.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

1C УТ 8.x &lt;-&gt; VirtueMart по протоколу CommerceML

Автор Centoff

Ответов: 1315
Просмотров: 220683
Последний ответ 27.10.2020, 15:32:10
от Leo1986
Импорт из CSV товаров с типами и свойствами из

Автор Gruz

Ответов: 499
Просмотров: 153276
Последний ответ 23.02.2017, 15:15:42
от orchanin
Как импортировать файл XML в Joomla VirtueMart?

Автор Кот Смюлан

Ответов: 2
Просмотров: 5522
Последний ответ 14.07.2016, 18:40:24
от Berzerker
импорт товаров в YML Яндекс маркет

Автор zmeyx

Ответов: 5
Просмотров: 11774
Последний ответ 14.07.2016, 18:34:28
от Berzerker
Скрипт экспорта товаров в Яндекс маркет (yml)

Автор gaalferov

Ответов: 12
Просмотров: 12128
Последний ответ 08.06.2016, 14:02:27
от DimaXP