Новости 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 Ответов
  • 172743 Просмотров
*

Alex Revo

  • Завсегдатай
  • 1995
  • 109 / 0
добавь в запрос списка товаров условие where product_in_stock>0
*

VashMaster

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
добавь в запрос списка товаров условие where product_in_stock>0

Странно, что сразу не включили это в код. Но как я понимаю, эти скрипты для программистов. Мол, основное всё есть, а до ума каждый сам доводите. В принципе логично.
*

necro2000

  • Осваиваюсь на форуме
  • 32
  • 4 / 1
добавь в запрос списка товаров условие where product_in_stock>0
Добавил, отправил Яндексу, если все будет ОК, выложу код.
*

positivegrowl

  • Новичок
  • 4
  • 0 / 0
Товарищи! Пожалуйста, помогите! Не могу подключить магазин. Вот скрипт:
Код
<?php
$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());
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>http://www.******</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";
$query = "SELECT * FROM $userstable";
$res = mysql_query($query) or die(mysql_error());
$rw=1;
while ($row=mysql_fetch_array($res)) {
$url="http://porta-market.ru/virtuemart?page=shop.product_details&flypage=flypage.tpl&product_id=".$row['product_id'];
$url=htmlspecialchars($url);
$product_full_image = "http://porta-market.ru/components/com_virtuemart/shop_image/product/".$row['product_full_image'];
$product_name = $row['product_name'];
//$product_desc = $row['product_desc'];
$product_s_desc = $row['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);
$query3 = "SELECT category_id FROM $product_category_xref WHERE product_id=".$row['product_id'];
$res3 = mysql_query($query3) or die(mysql_error());
$product_cat_id1=mysql_fetch_array($res3);
$product_cat_id=$product_cat_id1['category_id'];
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"<name>".$product_name."\"</name>\n";
echo"<description>".$product_name." от официального дилера.</description>\n";
echo"</offer>";
$rw++;
}
echo"</offers>\n";
echo"</shop>\n";
echo"</yml_catalog>\n";
?>

Ставил SEF-роутер. Скрипт:

Код
<?php
/**
* @package Joomla
* @subpackage VirtueMart Router for Joomla! 1.5 v 0.1
* @copyright 2008, Copyright (C) Denys Nosov, Community Joomla! Ukraine. All rights reserved.
* @license GNU/GPL.
* @author Denys Nosov (www.joomla-ua.org)
* Joomla! and VirtueMart Router for Joomla! 1.5 are free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed they include or
* are derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
*/

defined( '_JEXEC' ) or die( 'Restricted access' );

function virtuemartBuildRoute(&$query)
{
$segments = array();
if (isset($query['task'])) {
$segments[] = $query['task'];
unset($query['task']);
}
if(isset($query['page'])) {
$segments[] = $query['page'];
unset($query['page']);
}
if(isset($query['category_id'])) {
$segments[] = $query['category_id'];
unset($query['category_id']);
}
if(isset($query['flypage'])) {
$segments[] = $query['flypage'];
unset($query['flypage']);
}
if(isset($query['product_id'])) {
$segments[] = $query['product_id'];
unset($query['product_id']);
}
if(isset($query['ssl_redirect'])) {
$segments[] = $query['ssl_redirect'];
unset($query['ssl_redirect']);
}
if(isset($query['order_id'])) {
$segments[] = $query['order_id'];
unset($query['order_id']);
}
return $segments;
}

function virtuemartParseRoute($segments)
{
$vars = array();
$vars['task'] = $segments[0];
$vars['page'] = $segments[0];
$vars['ssl_redirect'] = $segments[0];
$vars['category_id'] = $segments[1];
$vars['order_id'] = $segments[1];
$vars['flypage'] = $segments[2];
$vars['product_id'] = $segments[3];
return $vars;
}

?>

Не могу понять, как теперь переделать ссыли.

У меня ссылка на страницу товара выглядит так:
http://tvoyport.ru/features/shop.product_details/54/ilvm_fly2_grey.tpl/13021.html

Но это полбеды. При проверке Yandex ругается и говорит:

Цитировать
http://tvoyport.ru/media/market_ya_1_1_utf8.php

Определена кодировка: unknown (строка 0, столбец 0)
Дата из файла: 2010-09-01 15:35 (строка 3, столбец 113)
[2010-09-01 15:35:29] (Fatal) [389:39] (Fatal) 521 Error parsing XML feed: Unterminated entity reference, 'S'


ВОПРОС: ЧТО ДЕЛАТЬ? НАЧАЛЬСТВО КАЗНИТ ! ! !
« Последнее редактирование: 15.12.2010, 17:18:05 от positivegrowl »
*

mike0808

  • Новичок
  • 5
  • 0 / 0
что делать
исходный код
<?php
$bid = '21';
$country_of_origin = "Россия";//надо вместо этого указать как-то в коде(как добавить в товар свойство то что
//производсто Россия?чтобы выглядело примерно так $category = "jos_vm_category";где добавить свойство jos_vm_country?
//потому что Яндекс выкидывает ошибку
/*-Название и описание предложения не соответствуют реальному товару.

Металлические двери Китай "141.2(Престиж)""
10 066 руб. в наличии в Porta-Market
Доставка: в г. Москва ? 1 000 руб.
Гарантия производителя, страна производства: Россия.

Металлические двери Китай "141.2(Престиж)" от официального дилера.

На Маркете страна производства: Россия.
На сайте магазина:
Производитель- Китай.*/
$manufacturer_warranty = "true";
$delivery = "true";
$hostname = "localhost";
$username = "";
$password = "";
$dbName = "portamar_db";
$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());
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>Porta-Market</name>\n";
echo"<company>Portamarket</company>\n";
echo"<url>http://www.porta-market.ru</url>\n";
echo"<currencies>\n";
echo"<currency  id=\"RUR\" rate=\"1\"/>\n";
echo"</currencies>\n";
//echo"<delivery>true</delivery>\n";
//echo"<manufacturer_warranty>true</manufacturer_warranty>\n";
//echo"<country_of_origin>Россия</country_of_origin>\n";
//<country_of_origin>Россия</country_of_origin>

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";
$res = mysql_query($query) or die(mysql_error());
$rw=1;
while ($row=mysql_fetch_array($res)) {
$url="http://porta-market.ru/virtuemart?page=shop.product_details&flypage=flypage.tpl&product_id=".$row['product_id'];
$url=htmlspecialchars($url);
$product_full_image = "http://porta-market.ru/components/com_virtuemart/shop_image/product/".$row['product_full_image'];
$product_name = $row['product_name'];
//$country = $row['product_name'];
//$product_desc = $row['product_desc'];
$product_s_desc = $row['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);
$query3 = "SELECT category_id FROM $product_category_xref WHERE product_id=".$row['product_id'];
$res3 = mysql_query($query3) or die(mysql_error());
$product_cat_id1=mysql_fetch_array($res3);
$product_cat_id=$product_cat_id1['category_id'];
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>".$delivery."</delivery>\n";
echo"<name>".$product_name."\"</name>\n";
echo"<description>".$product_name." от официального дилера.</description>\n";
echo"<manufacturer_warranty>".$manufacturer_warranty."</manufacturer_warranty>\n";
echo"<country_of_origin>".$country_of_origin."</country_of_origin>\n";
echo"</offer>";
$rw++;
}
echo"</offers>\n";
echo"</shop>\n";
echo"</yml_catalog>\n";
?>
*

necro2000

  • Осваиваюсь на форуме
  • 32
  • 4 / 1
Добавил, отправил Яндексу, если все будет ОК, выложу код.

Яндекс принял.
Внес изменения:
- отбор только опубликованных категорий;
- отбор товаров только в наличии.
Вот, что получилось:
Код
<?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_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="############/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_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;

}


?>
*

positivegrowl

  • Новичок
  • 4
  • 0 / 0
Яндекс принял.
Внес изменения:
- отбор только опубликованных категорий;
- отбор товаров только в наличии.
Вот, что получилось:

СПАСИБО ОГРОМАДНОЕ! Без проблем добавил себе!

+1
*

xontas

  • Захожу иногда
  • 72
  • 1 / 0
добрый день, прочитал весь топик, но не нашел ответа для себя.

вот мой код для маркета... может поможете?
пишет что ошибка какая то flypage

Код
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="2010-02-12 1:30">
<shop>
  <name>kupivannu.ru</name>
  <company>Интернет магазин сантехники Купи Ванну</company>
  <url>http://kupivannu.ru/</url>

<currencies><currency id="RUR" rate="1"/></currencies>

<categories>
  <category id="1" parentId="0">Душевая кабина Albatros T09 R97</category>
  <category id="2" parentId="1">Ванна Appollo 1701</category>
  <category id="3" parentId="2">Душевые кабины Golf</category>
  <category id="4" parentId="3">Ванны Albatros Erica</category>
</categories>

<offers>
  <offer id="1" available="true">
  <url>http://www.kupivannu.ru/index.php?page=shop.product_details&flypage=flypage.tpl&product_id=106&category_id=26&option=com_virtuemart&Itemid=64&vmcchk=1&Itemid=64</url>
  <price>37 268.60</price>
  <currencyId>RUR</currencyId>
  <categoryId>1</categoryId>
  <picture>http://www.kupivannu.ru/components/com_virtuemart/shop_image/product/_________________4c84a0a166320.jpg</picture>
  <local_delivery_cost>0</local_delivery_cost>
  <name>Душевая кабина Albatros T09 R97</name>
  <description>Итальянская Душевая кабина Albatros T09 R97 - гидромассаж, массаж стопы, без пара, ручной душ, верхний душ</description>
  <sales_notes>цена указана с учетом акции</sales_notes>
  </offer>


</offers>
</shop>
</yml_catalog>
*

Sova_barmak

  • Осваиваюсь на форуме
  • 39
  • 2 / 0
Тут спрашивали и раньше, но ответа не было, может кто уже знает. Что делать если в магазине несколько валют. У меня например в магазине цены в рублях, евро и долларах в админке и в магазине. Скрипт берет только числовое значение и дописывает RUR. Как сделать чтобы он автоматом еще и пересчитывал цену или хотя бы для каждой цены прописывал соответствующую валюту. Пробывал  сюда

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

тулить product_currency не хочет так(.

Подскажите пожалуйста может, кто знает вариант?
*

Xuga

  • Захожу иногда
  • 224
  • 122 / 0
  • Интернет-Маркетолог
Ребят ничего не получается. Подскажите какой должен быть код если включен sh404SEF?
Тот кто поможет получит приятный бонус :)

Код
<?php
//Пропишите для своей БД, пропишите наименование магазина, про адрес www.**********.ru тоже не забудьте
$hostname = "localhost";
$username = "123";
$password = "123";
$dbName = "123";
$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());
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>AllJap.ru</name>\n";
echo"<company>AllJap.ru</company>\n";
echo"<url>http://alljap.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";
$query = "SELECT * FROM $userstable";
$res = mysql_query($query) or die(mysql_error());
$rw=1;
while ($row=mysql_fetch_array($res)) {
$url="http://alljap.ru/virtuemart?page=shop.product_details&flypage=flypage.tpl&product_id=".$row['product_id'];
$product_full_image = "http://alljap.ru/components/com_virtuemart/shop_image/product/".$row['product_full_image'];
$product_name = $row['product_name'];
//$product_desc = $row['product_desc'];
$product_s_desc = $row['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);
$query3 = "SELECT category_id FROM $product_category_xref WHERE product_id=".$row['product_id'];
$res3 = mysql_query($query3) or die(mysql_error());
$product_cat_id1=mysql_fetch_array($res3);
$product_cat_id=$product_cat_id1['category_id'];
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"<name>".$product_name."\"</name>\n";
echo"<description>".$product_name."</description>\n";
echo"</offer>";
$rw++;
}
echo"</offers>\n";
echo"</shop>\n";
echo"</yml_catalog>\n";
?>

На выходе получили:
Код
category id="141" parentId="104">Titanium Automatic</category>

<category id="142" parentId="104">Lady Rose</category>
</categories>
<offers>
<offer id="1" available="true" bid="11">
<url>http://alljap.ru/virtuemart?page=shop.product_details&flypage=flypage.tpl&product_id=1</url>
<price>1232.00</price>
<currencyId>RUR</currencyId>
<categoryId>2</categoryId>
<picture>http://alljap.ru/components/com_virtuemart/shop_image/product/_________________4b9d0ec43f777.jpg</picture>

<name>Инструмент для чайной церемонии (Груша) HT-001"</name>
<description>Инструмент для чайной церемонии (Груша) HT-001</description>
</offer><offer id="2" available="true" bid="11">
<url>http://alljap.ru/virtuemart?page=shop.product_details&flypage=flypage.tpl&product_id=2</url>
<price>1102.00</price>
<currencyId>RUR</currencyId>
<categoryId>2</categoryId>
<picture>http://alljap.ru/components/com_virtuemart/shop_image/product/_________________4b9d1180de8d4.jpg</picture>

<name>Инструмент для чайной церемонии (Груша) HT-101"</name>
<description>Инструмент для чайной церемонии (Груша) HT-101</description>
</offer><offer id="3" available="true" bid="11">

По-идее все хорошо, анн нет...
1. Ссылки вида http://alljap.ru/virtuemart?page=shop.product_details&flypage=flypage.tpl&product_id=2 они нам не подходят так как ведет на страницу 404
2. Яндекс суМка ругается:
Определена кодировка: windows-1251 (строка 0, столбец 0)
Дата из файла: 2010-09-10 10:37 (строка 3, столбец 113)
[2010-09-10 10:38:56] (Fatal) [67:53] (Fatal) 521 Error parsing XML feed: Expected entity name for reference



Давайте решать пункт 1.
В свое время была аналогия, когда мы лечили RD_RSS для совместной работы с sh404sef
мы меняли:
Код
// url link to article
// & used instead of &amp; as this is converted by feed creator
    $item_link = 'index.php?option=com_content&task=view&id='. $row->id .'&Itemid='. $mainframe->getItemid( $row->id );
item_link = sefRelToAbs( $item_link );
На:
Код
// url link to article
// & used instead of &amp; as this is converted by feed creator
$item_link = JURI::base().'index.php?option=com_content&task=view&id='. $row->id .'&Itemid='. $mainframe->getItemid( $row->id );
    $item_link = JRoute::_( $item_link );

В данном конкретном случае строку:
Код
$url="http://alljap.ru/virtuemart?page=shop.product_details&flypage=flypage.tpl&product_id=".$row['product_id']; 
должны поменять на.... вопрос на что :)))
Думаем граждане...

Пункт 2. вообще не понимаю в чем косяк.

« Последнее редактирование: 10.09.2010, 11:39:12 от Xuga »
Рекламное агентство: Medianation
Skype: ibarchenkov

Группа по digital-маркетингу:
http://vk.com/dmarketing
*

Xuga

  • Захожу иногда
  • 224
  • 122 / 0
  • Интернет-Маркетолог
Немного повтыкав решил изменить код...
Меняем:
$url="http://alljap.ru/virtuemart?page=shop.product_details&flypage=flypage.tpl&product_id=".$row['product_id'];
На:
$url="http://alljap.ru/index.php?option=com_virtuemart&Itemid=".$Itemid['Itemid']."&category_id=".$row_cat['category_id'] ."&flypage=flypage.tpl&lang=ru&limitstart=0&page=shop.product_details&product_id=".$row['product_id'];

получаем ссылку вида:
http://alljap.ru/index.php?option=com_virtuemart&Itemid=&category_id=&flypage=flypage.tpl&lang=ru&limitstart=0&page=shop.product_details&product_id=1117
Которая уже sh404SEF редеректит во всяком случае на нужный нам товар:)))) но все равно не совсем корректно.....

Сразу обращаю внимание на ссылку..... у нас не проставились Itemid=КОСЯК&category_id=КОСЯК&
« Последнее редактирование: 10.09.2010, 12:10:45 от Xuga »
Рекламное агентство: Medianation
Skype: ibarchenkov

Группа по digital-маркетингу:
http://vk.com/dmarketing
*

Xuga

  • Захожу иногда
  • 224
  • 122 / 0
  • Интернет-Маркетолог
Яндекс принял.
Внес изменения:
- отбор только опубликованных категорий;
- отбор товаров только в наличии.
Вот, что получилось:
Код
<?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_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="############/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_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;

}


?>


ВСЕ ПРОСТО ШИКАРНО! но теперь 2 вопроса
1. При добавлении в яндекс
Определена кодировка: windows-1251 (строка 0, столбец 0)
Дата из файла: 2010-09-10 12:23 (строка 3, столбец 113)
[2010-09-10 12:24:20] (Fatal) [68:53] (Fatal) 521 Error parsing XML feed: Expected entity name for reference
2. Я не проставлял наличие товара. Как всем товарам быстро проставить наличие?
Рекламное агентство: Medianation
Skype: ibarchenkov

Группа по digital-маркетингу:
http://vk.com/dmarketing
*

Xuga

  • Захожу иногда
  • 224
  • 122 / 0
  • Интернет-Маркетолог
ыыыыыыыыыыыы я даун
68:53 это строка и символ
яндексу не нравится символ &
поехали дальше


Если вы не вбивали количество товаров на складе... а товаров у вас много и вы не хотите тратить пол дня на вбивание количества руками тогда читайте этот пост
http://joomlaforum.ru/index.php/topic,128919.msg705051.html#msg705051
« Последнее редактирование: 10.09.2010, 13:38:36 от Xuga »
Рекламное агентство: Medianation
Skype: ibarchenkov

Группа по digital-маркетингу:
http://vk.com/dmarketing
*

positivegrowl

  • Новичок
  • 4
  • 0 / 0
Ребята! Выкладываю скрипт немного доработанный, в нем убрана проблема с переменной <sales_notes>

Код
<?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>http://**********</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_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://**********/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://**********/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 "<sales_notes>минимальная сумма заказа 1000 руб</sales_notes> \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;

}


?>


Пробуйте, оценивайте=)
*

Sova_barmak

  • Осваиваюсь на форуме
  • 39
  • 2 / 0
Я был недавно уже писал :
Тут спрашивали и раньше, но ответа не было, может кто уже знает. Что делать если в магазине несколько валют. У меня например в магазине цены в рублях, евро и долларах. Скрипт берет только числовое значение и дописывает RUR. Как сделать чтобы он автоматом еще и пересчитывал цену или хотя бы для каждой цены прописывал соответствующую валюту. Пробывал  сюда
echo"<currencyId>RUB</currencyId>\n";

тулить product_currency не хочет так(.

Подскажите пожалуйста может, кто знает вариант?

Но ответа так и не дождался может кто уже решил эту проблему. Сегодня Яндекс прислал:
Цитировать
Шашлычница - барбекю"
1898 р. в наличии
На сайте магазина: 1898 UAH.
Гриль контактный Savoye"
356 р. в наличии
На сайте магазина: 356 EUR.

Помогите пожалуйста кто может
*

Xuga

  • Захожу иногда
  • 224
  • 122 / 0
  • Интернет-Маркетолог
Так-с геморой только начался.

Прохожу регистрацию в яндекс-маркете. В регистрации отказано по причине:
"Выявлены нарушения Требований к рекламным материалам:
-Информация о гарантии, доставке или стране производства вне специальных полей.

Нож поварской японский овощной "птичий клюв" Samura/ красная пакка Damascus SD-0011"
2 150 руб. в наличии."


Сейчас сижу и жду пояснений Яндекса. Может мне кто-то пояснить в чем дело?
Рекламное агентство: Medianation
Skype: ibarchenkov

Группа по digital-маркетингу:
http://vk.com/dmarketing
*

positivegrowl

  • Новичок
  • 4
  • 0 / 0
Ты через yml выгружаешь?
*

Xuga

  • Захожу иногда
  • 224
  • 122 / 0
  • Интернет-Маркетолог
ыы ве ок, просто в яндексе чайники работают )
Рекламное агентство: Medianation
Skype: ibarchenkov

Группа по digital-маркетингу:
http://vk.com/dmarketing
*

weathercock

  • Осваиваюсь на форуме
  • 37
  • 1 / 0
Все сделал как написано.Вебмастер Яндекса пишет следующее:

Определена кодировка: utf-8 (строка 0, столбец 0)
Дата из файла: 2010-09-16 23:12 (строка 3, столбец 113)
Предупреждение: Название магазина превышает ограничение по длине в 20 символов. В качестве названия использовано имя домена: www.САЙТ.ru (строка 48, столбец 9)
Успешно обработано 640 предложений из 640

Как по Вашему-все правильно?

Название сайта урезать не хочу..Яндекс ведь сам его урежет?Правильно я понимаю?
*

weathercock

  • Осваиваюсь на форуме
  • 37
  • 1 / 0
сделайте как он говорит - иначе вместо названия он будет использовать имя домена
Большое спасибо за ответ !
Т.е. прямо название сайте поменять? В Админке Joomla? Но на Алорисе тоже написано :Ювелирный интернет магазин Aloris.ru...
Считаю этот сайт образцом ювелирного сайта на Joomla,поэтому пример.
А с остальным-все номармально-что он про дату пишет и про кодировку?
*

weathercock

  • Осваиваюсь на форуме
  • 37
  • 1 / 0
да нет - в скрипте выгрузки

Beagler, простите за глупые вопросы,но я использую скрипт из первой станицы темы.(Не Market_ya.php, а просто market.php) Где именно заменить нужно?
Где именно поменять?
И если не сложно вот ссылка на мой yml : http://elite-silver.ru/media/market.php
Как по Вашему- там все в порядке?
СПАСИБО !
*

Restorator

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Как амперсанд игнорить? помогите пожалуйста
Вопрос снят, поиск по теме+ плюс выпрямление рук. У меня юндекс ругался не на наименование товара а на категорию. htmlspecialchars на категорию и проблема снята
« Последнее редактирование: 20.09.2010, 09:11:48 от Restorator »
*

text

  • Захожу иногда
  • 93
  • 0 / 0
Детали валидации YML файла

Ошибка: Неизвестный тип файла: text/x-c++; charset=utf-8
Фатальная ошибка: Внутренняя ошибка во время распаковки.

посоветуйте, пожалуйста, как с этим справиться?

VM 1.0.15
Или как включить функцию экспорта?
« Последнее редактирование: 28.09.2010, 00:03:31 от text »
*

text

  • Захожу иногда
  • 93
  • 0 / 0
Теперь такая ошибка:

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

--------------------------------------------------------------------------------
http://www.site.ru/market.yml
Ошибка: Неизвестный тип файла: text/x-c++; charset=iso-8859-1
Фатальная ошибка: Внутренняя ошибка во время распаковки

*

text

  • Захожу иногда
  • 93
  • 0 / 0
Не помогает. Та же ошибка:
Детали валидации YML файла

--------------------------------------------------------------------------------
http://www.сайт.ru/market.yml
Ошибка: Неизвестный тип файла: text/x-c++; charset=iso-8859-1
Фатальная ошибка: Внутренняя ошибка во время распаковки



Яндекс принял.
Внес изменения:
- отбор только опубликованных категорий;
- отбор товаров только в наличии.
Вот, что получилось:
Код
<?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_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="############/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_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;

}


?>
*

andx

  • Захожу иногда
  • 111
  • 6 / 0
Друзья, помогите пожалуйста, у меня почему то не выводится поле описания товара <description></description>. Вот такой вывод у меня получается:

Код
<offer id="4901" type="vendor.model" available="true" bid="11">
<url>http://kid-toy.ru/index.php?option=com_virtuemart&amp;Itemid=71&amp;category_id=162&amp;flypage=flypage.tpl&amp;lang=ru&amp;page=shop.product_details&amp;product_id=4901</url>
<price>15990.00</price>
<currencyId>RUR</currencyId>
<categoryId>162</categoryId>
<picture>http://kid-toy.ru/components/com_virtuemart/shop_image/product/pre2_3971.jpg</picture>
<delivery>true</delivery>
<vendor>Little Tikes</vendor>
<model>Игровой домик &quot;Дачный&quot;</model>
<description></description>
</offer>


Вот такая у меня конфигурация:

Код
<?php
include '../configuration.php';
$cfg = new JConfig();
$cfg_name = 'Детские игрушки интернет магазин, детские игрушки оптом, в розницу. Kid-toy.ru';
$cfg_company = 'ООО Ванда';
$cfg_url = 'kid-toy.ru';
 
$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_category_xref = $cfg->dbprefix."vm_product_category_xref";
$product_discount = $cfg->dbprefix."vm_product_discount";
 
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
mysql_select_db($dbName) or die(mysql_error());
 
mysql_query('set names cp1251');
 
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>$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_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_discount_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_price.product_currency,
$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'];
//ссылка для sh404SEF
$url="http://$cfg_url/index.php?option=com_virtuemart&amp;Itemid=71&amp;category_id=".$row[$i]['category_id']."&amp;flypage=flypage.tpl&amp;lang=ru&amp;page=shop.product_details&amp;product_id=".$row[$i]['product_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']);
$product_discount_id = $row[$i]['product_discount_id'];
$product_currency = $row[$i]['product_currency'];
$vendor = $row[$i]['mf_name'];
$product_price = substr($row[$i]['product_price'], 0, -3);
$product_cat_id=$row[$i]['category_id'];
echo"\n<offer id=\"".$row[$i]['product_id']."\" type=\"vendor.model\" available=\"true\" bid=\"$bid\">\n";
echo"<url>".$url."</url>\n";
$mysql_product_discount = mysql_query("SELECT amount FROM $product_discount WHERE discount_id='$product_discount_id'");
while ($array_product_discount = mysql_fetch_array($mysql_product_discount) )
$product_price = $product_price - $product_price * $array_product_discount['amount']  / 100;
echo"<price>$product_price</price>\n";
if ($product_currency == "RUB"){
         echo"<currencyId>RUR</currencyId>\n";
        } else {
echo"<currencyId>$product_currency</currencyId>\n";
}
echo"<categoryId>".$product_cat_id."</categoryId>\n";
 
if ($row[$i]['product_full_image']){
        echo"<picture>".$product_full_image ."</picture>\n";
        } else {
}
echo"<delivery>true</delivery> \n";
echo"<vendor>".HtmlSpecialChars($vendor)."</vendor>\n";
echo"<model>".HtmlSpecialChars(strip_tags($row[$i]['product_name']))."</model>\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 ya_unbag ($bug_str) {
$bug_str = str_replace('"','&quot;',$bug_str);
$bug_str = str_replace('&','&amp;',$bug_str);
$bug_str = str_replace('>','&gt;',$bug_str);
$bug_str = str_replace('<','&lt;',$bug_str);
$bug_str = str_replace("'","&apos;",$bug_str);
return $bug_str;
}

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;
}
?>

что тут может быть не так?

Конфиг:
  • Joomla 1.5.20
  • VM 1.1.5

ps. За помощь расстанусь с 500WMR
« Последнее редактирование: 30.09.2010, 10:26:15 от andx »
*

text

  • Захожу иногда
  • 93
  • 0 / 0
Fatal error: Class 'JConfig' not found in "корень/md/market.php" on line 24

market.php :

Код: php
строка 23. include '../configuration.php';
строка 24. $cfg = new JConfig();

Подскажите, пожалуйста, как исправить ошибку.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

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

Автор Centoff

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

Автор Gruz

Ответов: 499
Просмотров: 150980
Последний ответ 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
Просмотров: 11792
Последний ответ 08.06.2016, 14:02:27
от DimaXP