Новости Joomla

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

👩‍💻 Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод triggerEvent(), с помощью которого раньше вызывались события для плагинов. Теперь чтобы в своём коде вызвать событие для плагина и получить от него результаты нужно:- создать объект класса события- передать в него параметры

use Joomla\CMS\Event\AbstractEvent;use Joomla\CMS\Factory;use Joomla\CMS\Plugin\PluginHelper;// Грузим плагины нужных группPluginHelper::importPlugin('system');// Создаём объект события$event = AbstractEvent::create('onAfterInitUniverse', [    'subject' => $this,    'data'    => $data, // какие-то данные    'article' => $article, // ещё материал вдовесок    'product' => $product, // и товаров подвезли]);// Триггерим событиеFactory::getApplication()->getDispatcher()->dispatch(    $event->getName(), // Тут можно строку передать 'onAfterInitUniverse'    $event);// Получаем результаты// В случае с AbstractEvent это может быть не 'result',// а что-то ещё - куда сами отдадите данные.// 2-й аргумент - значение по умолчанию, // если не получены результаты$results = $event->getArgument('result', []);
Плюсы такого подхода - вам не нужно запоминать порядок аргументов и проверять их наличие. Если вы написали свой класс события, то в плагине можно получать аргументы с помощью методов $event->getArticle(), $event->getData(), $event->getProduct() и подобными - реализуете сами под свои нужды. Если такой класс события написали, то создаёте экземпляр своего класса события и укажите его явно в аргументе eventClass
use Joomla\Component\MyComponent\Administrator\Event\MyCoolEvent;$event = MyCoolEvent::create('onAfterInitUniverse', [    'subject'    => $this,    'eventClass' => MyCoolEvent::class, // ваш класс события    'data'       => $data, // какие-то данные    'article'    => $article, // ещё материал вдовесок    'product'    => $product, // и товаров подвезли]);
Ожидаемо, что класс вашего события будет расширять AbsractEvent или другие классы событий Joomla.🙁 Есть неприятный нюанс - нельзя просто так вызывать событие и ничего не передать в аргументы. Аргумент subject обязательный. Но если вы всё-таки не хотите туда ничего передавать - передайте туда пустой stdClass или объект Joomla\registry\Registry.
@joomlafeed#joomla #php #webdev

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

tom1501

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
Использую вариант с 15стр от necro2000 http://joomlaforum.ru/index.php/topic,59209.msg699896.html#msg699896

Код
<?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 cp1251');

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=\"UAH\" 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_publish='Y' and 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_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_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' 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="http://**************.com.ua/index.php?page=shop.product_details&amp;option=com_virtuemart&amp;flypage=flypage.tpl&amp;product_id=".$row[$i]['product_id'];



$product_full_image = "http://**************.com.ua/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']);

$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>UAH</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;

}


?>

Проблема - не выводится описание товара

Код
<offer id="56" available="true" bid="">
<url>http://********.com.ua/index.php?page=shop.product_details&amp;option=com_virtuemart&amp;flypage=flypage.tpl&amp;product_id=56</url>
<price>33.53</price>
<currencyId>UAH</currencyId>
<categoryId>34</categoryId>
<picture>http://******.com.ua/components/com_virtuemart/shop_image/product/sylvania_grolux.jpg</picture>
<delivery>true</delivery>
<name>Sylvania Grolux F15W/T8/G13</name>
<description></description>
</offer>

На сайте есть полное описание + краткое описание. В чем может быть проблема?
*

alexfox

  • Новичок
  • 6
  • 3 / 0
Установил скрипт - всё работает, но есть проблемка:
В базе VirtueMart содержится две цены на товар (ОПТ и Розница, по умолчанию выставлена - Розница), но в файл Яндекса выводится ОПТовый ценник...естественно, нужна цена розницы, т.е. та, которая выводится в интернет-магазине.
Подскажите как это исправить не переделывая весь скрпит?
*

likklir

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Установил скрипт - всё работает, но есть проблемка:
В базе VirtueMart содержится две цены на товар (ОПТ и Розница, по умолчанию выставлена - Розница), но в файл Яндекса выводится ОПТовый ценник...естественно, нужна цена розницы, т.е. та, которая выводится в интернет-магазине.
Подскажите как это исправить не переделывая весь скрпит?

в строку " WHERE $tb_product.product_publish='Y' " добавь " and $tb_price.shopper_group_id='2' " цифра два это номер твоей цены, посмотри его в таблице "jos_vm_product_price" в столбике "shopper_group_id" напротив нужных цен.

Если у тебя всего 2 цены то скорее всего это будет цифра "2"

как сделать вариант с указанием наличия товара на складе?

на 15 стр. есть вариант, когда экспортируются только опубликованные категории и товары в наличии. А как сделать, чтобы экспортировались все товары, но при этом указывалось наличие - есть на складе или под заказ?

Чтобы выводило весь товар удали строчку " WHERE $tb_product.product_publish='Y' ", если у тебя  " WHERE $tb_product.product_publish='Y' and еще что то", то удали только " $tb_product.product_publish='Y' and "
« Последнее редактирование: 25.11.2010, 20:29:54 от likklir »
*

sutkind

  • Новичок
  • 7
  • 0 / 0
Как выгрузить через скрипт в yml не все категории, а только нужные мне?
А то у нас на сайте есть комиссионный отдел, а Яндекс категорически против б/у товаров.
*

likklir

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Как выгрузить через скрипт в yml не все категории, а только нужные мне?
А то у нас на сайте есть комиссионный отдел, а Яндекс категорически против б/у товаров.

Могу предложить тебе в  старых товарых в кратком описание ввести б/у, а в коде добавь проверку в строку " WHERE $tb_product.product_publish='Y' " добавь " and $product.product_s_desc=NULL".
Должно сработать. Только поле "краткое описание" у не б/у должно быть пустым. Тут уже сам смотри каких товаров больше б/у или новых. Если новых меньше то можешь у них поставить в кратком описание "new" и тогда надо будет добавить " and $product.product_s_desc="new" ". Вообщем пробуй.
*

sutkind

  • Новичок
  • 7
  • 0 / 0
Интересный ход! Спасибо. Может какие-то еще есть варианты? Может в описании КАТЕГОРИИ что-нибудь поставить? И сделать в проверку на отсутствие (наличие) такого описания? Какие поля за это отвечают?
*

likklir

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Интересный ход! Спасибо. Может какие-то еще есть варианты? Может в описании КАТЕГОРИИ что-нибудь поставить? И сделать в проверку на отсутствие (наличие) такого описания? Какие поля за это отвечают?

Забыл про категории =). можете фильтровать и по ним например " and $tb_product_category_xref.category_id<>?" вместо ? вписать номер ненужной категории. Так не надо будет вносить изменения в товар, но если таких категорий будет много то запрос в БД прибавит в весе.
« Последнее редактирование: 28.11.2010, 19:15:32 от likklir »
*

sutkind

  • Новичок
  • 7
  • 0 / 0
Забыл про категории =). можете фильтровать и по ним например " and $tb_product_category_xref.category_id<>?" вместо ? вписать номер ненужной категории. Так не надо будет вносить изменения в товар, но если таких категорий будет много то запрос в БД прибавит в весе.
Делал так. не выдает в YML файл указанную категорию, но товары из этой категории все равно присутствуют в YML файле. не могу победить это.
Можно как-то с вами по icq или по почте пообщаться?
icq 774480
*

likklir

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Соберу все вместе и попробую расписать подробнее.
Приведу вариант когда надо чтобы в Яндекс маркете не опубликовывалась категория 15 и ее подкатегории 16,17,18.

1. В код формирования списка категорий добавляем условие, при котором не будут учитываться категория 15 и ее подкатегории:
Код
echo"<categories>\n";
$query_cat = "SELECT * FROM $category_xref WHERE $category_xref.category_parent_id<>15 AND $category_xref.category_child_id<>15";
$res_cat = mysql_query($query_cat) or die(mysql_error());
$rw=1;

2. В код формирования товара добавляем условие, при котором не будут учитываться категории 15,16,17,18:
Код
LEFT JOIN $tb_category
ON $tb_product_category_xref.category_id = $tb_category.category_id
WHERE $tb_product.product_publish='Y' AND $tb_category.category_id not in('15','16','17','18')
";

Пока не нашел способ упростить проверку на втором шаге. когда подкатегорий больше 3 то не очень приятный код получается.
*

sutkind

  • Новичок
  • 7
  • 0 / 0
Соберу все вместе и попробую расписать подробнее.
Приведу вариант когда надо чтобы в Яндекс маркете не опубликовывалась категория 15 и ее подкатегории 16,17,18.

1. В код формирования списка категорий добавляем условие, при котором не будут учитываться категория 15 и ее подкатегории:
Код
echo"<categories>\n";
$query_cat = "SELECT * FROM $category_xref WHERE $category_xref.category_parent_id<>15 AND $category_xref.category_child_id<>15";
$res_cat = mysql_query($query_cat) or die(mysql_error());
$rw=1;

2. В код формирования товара добавляем условие, при котором не будут учитываться категории 15,16,17,18:
Код
LEFT JOIN $tb_category
ON $tb_product_category_xref.category_id = $tb_category.category_id
WHERE $tb_product.product_publish='Y' AND $tb_category.category_id not in('15','16','17','18')
";

Пока не нашел способ упростить проверку на втором шаге. когда подкатегорий больше 3 то не очень приятный код получается.

Огромное тебе спасибо, земляк!
*

a_pesikov

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
А есть модификация что бы ссылки выдавались такие же как sh404SEF выдает. А то Яндекс цены не вяжет со страницами в своем поиске :( ТАк как на сайте проиндексировано ЧПУ а в XML без!
*

likklir

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
А есть модификация что бы ссылки выдавались такие же как sh404SEF выдает. А то Яндекс цены не вяжет со страницами в своем поиске :( ТАк как на сайте проиндексировано ЧПУ а в XML без!

Врятли такая модификация выложена. Тут надо переписывать код формирования url. Если есть желание посмотрите как sh404SEF формирует url и выдерните от туда нужный код.
*

biaggi32

  • Осваиваюсь на форуме
  • 19
  • 0 / 0
Подскажите пожалуйста, как добавить полное описание товара товара в <description>, или заменить краткое описание на полное описание?
*

biaggi32

  • Осваиваюсь на форуме
  • 19
  • 0 / 0
Подскажите пожалуйста, как добавить полное описание товара товара в <description>, или заменить краткое описание на полное описание?
Уже сам сделал, вопрос снят... А вот по поводу ЧПУ в XML, то это было бы очень хорошо. Если кто знает как сделать ЧПУ в прайс-листе, поделитесь...

Господа помогите пожалуйста - что делать? при валидации вот такая ошибка

http://www.starshina67.ru/market.php
Определена кодировка: utf-8 (строка 0, столбец 0)
Дата из файла: 2010-12-03 17:37 (строка 3, столбец 113)
Ошибка: Не указано название категории (строка 131, столбец 46)
Фатальная ошибка: Фид отклонен
*

likklir

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Господа помогите пожалуйста - что делать? при валидации вот такая ошибка

http://www.starshina67.ru/market.php
Определена кодировка: utf-8 (строка 0, столбец 0)
Дата из файла: 2010-12-03 17:37 (строка 3, столбец 113)
Ошибка: Не указано название категории (строка 131, столбец 46)
Фатальная ошибка: Фид отклонен

После того как сформировались твои 32211 категорий =). Выпадает ошибка:
Код
<offers>
<br />
<b>Fatal error</b>:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 43 bytes) in <b>/home/u227113/starshina67.ru/www/market.php</b> on line <b>182</b><br />

Примерный перевод: Позволенная емкость памяти 33554432 байтов исчерпана.

Про то где менять настройки выделения памяти писали выше.
*

sutkind

  • Новичок
  • 7
  • 0 / 0


Примерный перевод: Позволенная емкость памяти 33554432 байтов исчерпана.

Про то где менять настройки выделения памяти писали выше.


в настройках php у хостера
*

Maxd

  • Новичок
  • 7
  • 1 / 0
Господа помогите пожалуйста - что делать? при валидации вот такая ошибка

http://www.starshina67.ru/market.php
Определена кодировка: utf-8 (строка 0, столбец 0)
Дата из файла: 2010-12-03 17:37 (строка 3, столбец 113)
Ошибка: Не указано название категории (строка 131, столбец 46)
Фатальная ошибка: Фид отклонен
ошибка таже... если использовать код выложенный на 15 странице (с модификацией – не отображает товары которых нет в наличии и категории которые скрытые на сайте) то скрытые категории на сайте в yml отображаются как
Код
<category id="28"></category>
<category id="29" parentId="28"></category>
<category id="30" parentId="28"></category>

также описание у товаров отсуствует
Код
<name>Шампунь Head and Shoulders «Гладкие и шелковистые 2в1» 200мл."</name>
<description></description>
</offer>

как бороться не знаю не селен в написание... мот кто вылечит беду?

(описание не работало из за отсутствия строчки $description_template = '{product_desc}'; )

вернул пока что скрытые категории обратно в Yml
заменил строчку
$query2 = "SELECT category_name FROM $category WHERE category_publish='Y' and category_id=".$row_cat['category_child_id'];
на строчку
$query2 = "SELECT category_name FROM $category WHERE category_id=".$row_cat['category_child_id'];
при этом товары которых нет в наличии в yml не отображаются...
« Последнее редактирование: 05.12.2010, 04:15:51 от Maxd »
*

likklir

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Maxd, попробую вам помочь.

Попробуйте вот так:
1.  Оставляем вашу проверку в покое
Код
$query2 = "SELECT category_name FROM $category WHERE category_publish='Y' and category_id=".$row_cat['category_child_id'];

2. Добавляем проверку на наличие имени у категории
Код
	$cat_name=$name_cat['category_name'];
if ($cat_name<>NULL) {
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++;

3. Добавляем в проверку для вывода товара условие на проверку опубликована ли категория товара
Код
ON $tb_product_category_xref.category_id = $tb_category.category_id
WHERE $tb_product.product_publish='Y' and $tb_category.category_publish<>'Y'
";

Напомню, что код изменен под ваши условия:
  • не показывать в YML неопубликованные категории и товары из этих категорий
  • не показывать неопубликованные товары

По поводу описания посмотрите если у вас код
Код
echo"<description>". $product_s_desc."</description>\n";

Попробуйте заменить его на
Код
echo"<description>". $product_desc."</description>\n";
« Последнее редактирование: 06.12.2010, 01:10:02 от likklir »
*

a_pesikov

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
Врятли такая модификация выложена. Тут надо переписывать код формирования url. Если есть желание посмотрите как sh404SEF формирует url и выдерните от туда нужный код.

Желание есть, знаний нет :( Совсем по мелочи что-то правлю но это для меня больно серьезно
*

SolopoV

  • Давно я тут
  • 576
  • 16 / 0
  • зеленею...
Не нашел как выгрузить в файл "product_type_name" - то есть элемент <typePrefix>xxx</typePrefix>. Если кто выгружал, подскажите пожалуйста как делали?
*

text

  • Захожу иногда
  • 93
  • 0 / 0
Подскажите, пожалуйста, как исправить эту ошибку парсинга.

Детали валидации YML файла

--------------------------------------------------------------------------------
http://www.XXX.ru/market.php
Определена кодировка: windows-1251 (строка 0, столбец 0)
Дата из файла: 2010-12-08 21:16 (строка 3, столбец 113)
Фатальная ошибка: Ошибка парсинга XML: Error parsing XML feed: No character data is allowed by content model (строка 71, столбец 13)

т.е это эти строки
строка 70     $tb_product.product_id,
строка 71    
строка 72     $tb_product.product_name,
Т.е. Яндекс дальше 3 этапа не пропустил.

На сайте http://www.XXX.ru/market.php (во время тестирования, с включенной опцией вывода ошибок) выводились все категории, а потом стояло сообщение на английском  что-то вроде "проверьте правильность запроса к БД"... - Query failed : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM

   (jos_vm_product_category_xref

RIGHT JOIN (jos_vm_product_price
' at line 22

А когда был запрещен вывод ошибок появлялось такое сообщение на английском по адресу http://www.XXX.ru/market.php:
XML-страница не может быть отображена
Следующие Tags не закрыты: yml_catalog, shop, offers. Ошибка при обработке ресурса 'http://www.ххх.ru

 


 
Код

<?php
//БД,  наименование магазина, адрес www.XXX.ru
$hostname = "localhost";
$username = "XXX";
$password = "XXX";
$dbName = "XXX";
$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');


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>XXX</name>\n";
echo"<company>XXX</company>\n";
echo"<url>http://www.XXX.ru</url>\n";
echo"<currencies>\n";
echo"<currency  id=\"RUR\" 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";



$tb_product             = "jos_vm_product";

$tb_category            = "jos_vm_category";

$tb_product_category_xref   = "jos_vm_product_category_xref";

$tb_price               = "jos_vm_product_price";



$query = "

SELECT

   $tb_product.product_id,

   $tb_product.product_name,

   $tb_category.category_name,

   $tb_category.category_id,

   $tb_product_category_xref.category_id,

   $tb_price.product_price,

   $tb_product.product_unit,

   $tb_product.product_full_image,

   $tb_product.product_s_desc,

   
FROM

   ($tb_product_category_xref

RIGHT JOIN ($tb_price

RIGHT JOIN ($tb_product

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://www.XXX.ru/component/product_id,".$row[$i]['product_id'];
      $url=htmlspecialchars($url);
      
      
      $product_full_image = "http://XXX.ru/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']);

      $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.2010, 21:59:27 от text »
*

likklir

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Не нашел как выгрузить в файл "product_type_name" - то есть элемент <typePrefix>xxx</typePrefix>. Если кто выгружал, подскажите пожалуйста как делали?

Если я правильно понял из описания в яндексе (typePrefix - это Группа товаров/категория), то все просто:

1. Вставляем код для запоминания типа продукции:

      $product_cat_id=$row[$i]['category_id'];
      $product_cat_name=$row[$i]['category_name'];
      $product_desc=$row[$i]['product_desc'];

2. Вставляем вывод типа продукции.

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

Пробуйте  ^-^
*

SolopoV

  • Давно я тут
  • 576
  • 16 / 0
  • зеленею...
Если я правильно понял из описания в яндексе (typePrefix - это Группа товаров/категория), то все просто:

1. Вставляем код для запоминания типа продукции:

      $product_cat_id=$row[$i]['category_id'];
      $product_cat_name=$row[$i]['category_name'];
      $product_desc=$row[$i]['product_desc'];

2. Вставляем вывод типа продукции.

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

Пробуйте  ^-^

Ага, понял, спасибо. Только вот у меня немного не так, я хотел тип товара выгрузить (мальчик\девочка). Но все равно спасибо. Уверен, Ваш совет пригодится.
*

likklir

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Если скажите в каком поле магазина у вас идет описание мальчик/девочка, то я вам попробую помочь =)
*

text

  • Захожу иногда
  • 93
  • 0 / 0
J 1.0.12
Посоветуйте, пожалуйста, как правильно сформулировать запрос данного вида:

Код:
-------------------------------------
SELECT
   $tb_product.product_id,
   $tb_product.product_name,
   $tb_category.category_name,
   $tb_category.category_id,
   $tb_product_category_xref.category_id,
   $tb_price.product_price,
   $tb_product.product_unit,
   $tb_product.product_full_image,
   $tb_product.product_s_desc,
FROM
   ($tb_product_category_xref
RIGHT JOIN ($tb_price
RIGHT JOIN ($tb_product
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'
";
« Последнее редактирование: 09.12.2010, 22:41:46 от text »
*

likklir

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Код
$query = "
SELECT
$tb_product.product_id,
$tb_product.product_name,
$tb_category.category_name,
$tb_category.category_id,
$tb_product_category_xref.category_id,
$tb_price.product_price,
$tb_product.product_unit,
$tb_product.product_full_image,
$tb_product.product_s_desc,

FROM
($tb_product_category_xref RIGHT JOIN ($tb_price
RIGHT JOIN $tb_product 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'
";

Вот попробуй. Сначала не понял, что ты спросил  ^-^. Потом понял и изменил код.
« Последнее редактирование: 10.12.2010, 18:15:11 от likklir »
*

text

  • Захожу иногда
  • 93
  • 0 / 0
Код
$query = "
SELECT
$tb_product.product_id,
$tb_product.product_name,
$tb_category.category_name,
$tb_category.category_id,
$tb_product_category_xref.category_id,
$tb_price.product_price,
$tb_product.product_unit,
$tb_product.product_full_image,
$tb_product.product_s_desc,

FROM
($tb_product_category_xref RIGHT JOIN ($tb_price
RIGHT JOIN $tb_product 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'
";

Вот попробуй. Сначала не понял, что ты спросил  ^-^. Потом понял и изменил код.
likklir, спасибо.
По-твоему не прошло.
Сделал так:
$query = "SELECT * FROM $userstable";
*

likklir

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
likklir, спасибо.
По-твоему не прошло.
Сделал так:
$query = "SELECT * FROM $userstable";
Значит я так и не понял, что ты хотел изменить в коде =). Если есть возможность кинь в личку свой код. Очень хочется посмотреть результат.
*

text

  • Захожу иногда
  • 93
  • 0 / 0
Значит я так и не понял, что ты хотел изменить в коде =). Если есть возможность кинь в личку свой код. Очень хочется посмотреть результат.
likklir,
смотри личку.
« Последнее редактирование: 16.12.2010, 12:20:06 от text »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

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

Автор Centoff

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

Автор Gruz

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

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

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

Автор zmeyx

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

Автор gaalferov

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