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

salongin

  • Новичок
  • 9
  • 1 / 0
Добрый день всем!

У меня Joomla 1.5.18, VM 1.1.4 и +SEF-router, автор danik.html  (http://joomlaforum.ru/index.php/topic,130264.0.html)

Скрипт market_ya из начала этой темы работает, но необходимо изменить $url в теге <offer>  - привести в соответствие с url-ом, который строит router.

И тут проблема: нужен транслит для имён категорий, я использую функцию vm_transliterate из router.php Даника , скопировал её в market_ya, но она почему-то у меня не действует и я получаю в теге <offer> URL-ы типа

<url>http://site.ru/features/category/product/196-Перфораторы SDS Plus/610-HTC-DH24PC3.html</url>,

а нужно мне вот что: perforatori-sds-plus

код, добавленный в скрипт, вместе с изменённым $url, выглядит так:

Код: php
$category_name = $row[$i]['category_name'];

$alias = vm_transliterate($category_name);


// $alias = JFilterOutput::stringURLSafe($alias);


$url="http://site.ru/features/category/product/".$row[$i]['category_id']."-".$alias."/".$row[$i]['product_id']."-".$row[$i]['product_artikul'].".html";

    ...

function vm_transliterate($name)
{
$tbl= array(
'?'=>'a', '?'=>'b', '?'=>'v', '?'=>'g', '?'=>'d', '?'=>'e', '?'=>'g', '?'=>'z',
'?'=>'i', '?'=>'y', '?'=>'k', '?'=>'l', '?'=>'m', '?'=>'n', '?'=>'o', '?'=>'p',
'?'=>'r', '?'=>'s', '?'=>'t', '?'=>'u', '?'=>'f', '?'=>'i', '?'=>'e', '?'=>'A',
'?'=>'B', '?'=>'V', '?'=>'G', '?'=>'D', '?'=>'E', '?'=>'G', '?'=>'Z', '?'=>'I',
'?'=>'Y', '?'=>'K', '?'=>'L', '?'=>'M', '?'=>'N', '?'=>'O', '?'=>'P', '?'=>'R',
'?'=>'S', '?'=>'T', '?'=>'U', '?'=>'F', '?'=>'I', '?'=>'E', '?'=>"yo", '?'=>"h",
'?'=>"ts", '?'=>"ch", '?'=>"sh", '?'=>"shch", '?'=>"", '?'=>"", '?'=>"yu", '?'=>"ya",
'?'=>"Yo", '?'=>"H", '?'=>"Ts", '?'=>"Ch", '?'=>"Sh", '?'=>"Shch", '?'=>"", '?'=>"",
'?'=>"Yu", '?'=>"Ya"
);

return strtr($name, $tbl);

}

Если раскомментировать stringURLSafe, то скрипт обрывается на первом же <offer> .
Если закоментировать - скрипт работает до конца, но все имена категорий не в транслите.

Что у меня не так? Что нужно сделать, чтобы получить корректный транслит? Спасибо заранее.

Вячеслав
*

salongin

  • Новичок
  • 9
  • 1 / 0
Разобрался ))
Проблема была с кодировкой - скопировал транслит таблицу заново и пересохранил аккуратно в win-1251, и всё заработало ))
« Последнее редактирование: 17.12.2010, 14:25:08 от salongin »
*

a_pesikov

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
Разобрался ))
Проблема была с кодировкой - скопировал транслит таблицу заново и пересохранил аккуратно в win-1251, и всё заработало ))

А можно код всего получившегося файла? Очень надо!
*

salongin

  • Новичок
  • 9
  • 1 / 0
А можно код всего получившегося файла? Очень надо!

Нет проблем )

Код: php
<?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://tvoyport.ru</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_product.product_artikul,

$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_thumb_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'];


 
$name = $row[$i]['category_name'];

$alias = vm_transliterate($name);



$alias = strtolower( $alias );

$alias = preg_replace('/&.+?;/', '', $alias); // kill entities

$alias = str_replace( '_', '-', $alias );

$alias = preg_replace('/[^a-z0-9\s-.]/', '', $alias);

$alias = preg_replace('/\s+/', '-', $alias);

$alias = preg_replace('|-+|', '-', $alias);

$alias = trim($alias, '-');


$hvost = $row[$i]['product_artikul'];

if (preg_match('/[^A-Za-z0-9_\-]/',$hvost)) {
   


$hvost = vm_transliterate($hvost);

$hvost = strtolower($hvost);

$hvost = preg_replace('/&.+?;/', '',$hvost); // kill entities

$hvost = str_replace( '_', '-',$hvost );

$hvost = preg_replace('/[^a-z0-9\s-.]/', '',$hvost);

$hvost = preg_replace('/\s+/', '-',$hvost);

$hvost = preg_replace('|-+|', '-',$hvost);

$hvost = trim($hvost, '-');

}

$url="http://www.tvoyport.ru/features/category/product/".$row[$i]['category_id']."-".$alias."/".$row[$i]['product_id']."-".$hvost.".html";

$product_full_image = "http://www.tvoyport.ru/components/com_virtuemart/shop_image/product/".$row[$i]['product_thumb_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;

}

function vm_transliterate($name)
{
$tbl= array(
'а'=>'a', 'б'=>'b', 'в'=>'v', 'г'=>'g', 'д'=>'d', 'е'=>'e', 'ж'=>'g', 'з'=>'z',
'и'=>'i', 'й'=>'y', 'к'=>'k', 'л'=>'l', 'м'=>'m', 'н'=>'n', 'о'=>'o', 'п'=>'p',
'р'=>'r', 'с'=>'s', 'т'=>'t', 'у'=>'u', 'ф'=>'f', 'ы'=>'i', 'э'=>'e', 'А'=>'A',
'Б'=>'B', 'В'=>'V', 'Г'=>'G', 'Д'=>'D', 'Е'=>'E', 'Ж'=>'G', 'З'=>'Z', 'И'=>'I',
'Й'=>'Y', 'К'=>'K', 'Л'=>'L', 'М'=>'M', 'Н'=>'N', 'О'=>'O', 'П'=>'P', 'Р'=>'R',
'С'=>'S', 'Т'=>'T', 'У'=>'U', 'Ф'=>'F', 'Ы'=>'I', 'Э'=>'E', 'ё'=>"yo", 'х'=>"h",
'ц'=>"ts", 'ч'=>"ch", 'ш'=>"sh", 'щ'=>"shch", 'ъ'=>"", 'ь'=>"", 'ю'=>"yu", 'я'=>"ya",
'Ё'=>"Yo", 'Х'=>"H", 'Ц'=>"Ts", 'Ч'=>"Ch", 'Ш'=>"Sh", 'Щ'=>"Shch", 'Ъ'=>"", 'Ь'=>"",
'Ю'=>"Yu", 'Я'=>"Ya"
);

return strtr($name, $tbl);

}
?>

Вроде работает ))
*

a_pesikov

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
Нет проблем )

Код: php
<?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://tvoyport.ru</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_product.product_artikul,

$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_thumb_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'];


 
$name = $row[$i]['category_name'];

$alias = vm_transliterate($name);



$alias = strtolower( $alias );

$alias = preg_replace('/&.+?;/', '', $alias); // kill entities

$alias = str_replace( '_', '-', $alias );

$alias = preg_replace('/[^a-z0-9\s-.]/', '', $alias);

$alias = preg_replace('/\s+/', '-', $alias);

$alias = preg_replace('|-+|', '-', $alias);

$alias = trim($alias, '-');


$hvost = $row[$i]['product_artikul'];

if (preg_match('/[^A-Za-z0-9_\-]/',$hvost)) {
   


$hvost = vm_transliterate($hvost);

$hvost = strtolower($hvost);

$hvost = preg_replace('/&.+?;/', '',$hvost); // kill entities

$hvost = str_replace( '_', '-',$hvost );

$hvost = preg_replace('/[^a-z0-9\s-.]/', '',$hvost);

$hvost = preg_replace('/\s+/', '-',$hvost);

$hvost = preg_replace('|-+|', '-',$hvost);

$hvost = trim($hvost, '-');

}

$url="http://www.tvoyport.ru/features/category/product/".$row[$i]['category_id']."-".$alias."/".$row[$i]['product_id']."-".$hvost.".html";

$product_full_image = "http://www.tvoyport.ru/components/com_virtuemart/shop_image/product/".$row[$i]['product_thumb_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;

}

function vm_transliterate($name)
{
$tbl= array(
'а'=>'a', 'б'=>'b', 'в'=>'v', 'г'=>'g', 'д'=>'d', 'е'=>'e', 'ж'=>'g', 'з'=>'z',
'и'=>'i', 'й'=>'y', 'к'=>'k', 'л'=>'l', 'м'=>'m', 'н'=>'n', 'о'=>'o', 'п'=>'p',
'р'=>'r', 'с'=>'s', 'т'=>'t', 'у'=>'u', 'ф'=>'f', 'ы'=>'i', 'э'=>'e', 'А'=>'A',
'Б'=>'B', 'В'=>'V', 'Г'=>'G', 'Д'=>'D', 'Е'=>'E', 'Ж'=>'G', 'З'=>'Z', 'И'=>'I',
'Й'=>'Y', 'К'=>'K', 'Л'=>'L', 'М'=>'M', 'Н'=>'N', 'О'=>'O', 'П'=>'P', 'Р'=>'R',
'С'=>'S', 'Т'=>'T', 'У'=>'U', 'Ф'=>'F', 'Ы'=>'I', 'Э'=>'E', 'ё'=>"yo", 'х'=>"h",
'ц'=>"ts", 'ч'=>"ch", 'ш'=>"sh", 'щ'=>"shch", 'ъ'=>"", 'ь'=>"", 'ю'=>"yu", 'я'=>"ya",
'Ё'=>"Yo", 'Х'=>"H", 'Ц'=>"Ts", 'Ч'=>"Ch", 'Ш'=>"Sh", 'Щ'=>"Shch", 'Ъ'=>"", 'Ь'=>"",
'Ю'=>"Yu", 'Я'=>"Ya"
);

return strtr($name, $tbl);

}
?>

Вроде работает ))

А это что за параметр product_artikul? Что-то свое как я понимаю? Чем от product_sku отличается?
*

salongin

  • Новичок
  • 9
  • 1 / 0
А это что за параметр product_artikul? Что-то свое как я понимаю? Чем от product_sku отличается?

Ну да, своё.. почти  )
Если подробнее - то у меня в базе товара - не один, а два артикула. Один - это внутренний артикул товара, другой - каталожный номер производителя. Первый хранится в поле `product_sku`, второй - `product_articul` - это уже я сам добавил этот столбец в таблицу `jos_vm_product`.
Оба номера выводятся на карточку товара.
Далее. Функция vm_getProduct из файла Даника изменена - в "хвосте" url-а берётся не название товара (`product_name`, как в оригинале у Даника), а `product_artikul` - для нас это лучше.
Код: php
// возвращает продукт по id как строку
function vm_getProduct($id)
{
static $products;
if( isset( $products[$id] ) ) return $products[$id];

$db = & JFactory::getDBO();
$query = 'SELECT product_artikul as name FROM #__vm_product '
.'WHERE product_id = ' . (int) $id . ' '
;
$db->setQuery($query);

$products[$id] = $db->loadResult();
return $products[$id];
}

Исходя из этого построен и url в market_ya.

Вот, например:

http://tvoyport.ru/features/category/product/52-benzinovie-pili/106-hsq-952802230.html

сверху-слева от картинки - артикул и код товара.

Артикул внутренний это `product_sku`,
Артикул производителя - это `product_artikul`

Вот такая история )

 


 
*

andx

  • Захожу иногда
  • 111
  • 6 / 0
salongin
Спасибо за код для роутера от Даника! Взял себе ту часть, которая отвечает за формирование ссылки, все работает!
*

a_pesikov

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
salongin
Спасибо за код для роутера от Даника! Взял себе ту часть, которая отвечает за формирование ссылки, все работает!

Я в PHP не силен поэтому никак прикрутить не получается, покажь пожалуйста что в итоге у тебя заработало и что куда вставлял.
*

salongin

  • Новичок
  • 9
  • 1 / 0
Я в PHP не силен поэтому никак прикрутить не получается, покажь пожалуйста что в итоге у тебя заработало и что куда вставлял.

Правильно заданный вопрос - это половина ответа. Правильно заданного вопроса не наблюдаю..
Но ответить попробую. Хотя вроде и так уже всё рассказал и показал...

У router.php кодировка - UTF-8 естественно. Яндексу же нужна win-1251, поэтому в market_ya.php она и есть. Разные кодировки, то есть
Когда я копировал у себя в PHP-редакторе функцию vm_transliterate из файла router.php в файл market_ya.php - не подумал об этом (кириллица в моём редакторе отображалась корректно). Но при работе получались ссылки вида http://tvoyport.ru/features/category/product/100 Тепловентиляторы и пушки/13375 МАКАР-ТВ-5/220K.html, а они должны были быть в транслите. То есть функция vm_transliterate не срабатывала. Я тоже не силён в PHP,  пару часов помучал код так и сяк, и так и не понял, в чём дело.

Когда же мне это надоело, и я решил задать вопрос на форуме-скопировал код в свое первое сообщение (от 17.12) - увидел знаки вопроса вместо букв кириллицы, не скажу, что сразу догадался, но заподозрил в чём дело. Потому и говорю, что правильно заданный вопрос - это половина ответа ))

Ну а когда открыл оба файла в блокноте, заново скопипастил vm_transliterate из одного файла в другой, и сохранил market_ya в родной кодировке - всё заработало. Смотри в предыдущем сообщении ссылку.

На самом деле давать такие ответы, блин - это как стрелять в темноту.. по углю. У тебя-то в чём проблема? Какая конфигурация, какой код, что к чему прикрутить хочешь? И какой результат получить? С этого надо бы начинать, а не мучать народ вопросами, на которые неизвестно как отвечать... Толком говори, помочь попробуем...

   

*

a_pesikov

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
Правильно заданный вопрос - это половина ответа. Правильно заданного вопроса не наблюдаю..
Но ответить попробую. Хотя вроде и так уже всё рассказал и показал...

У router.php кодировка - UTF-8 естественно. Яндексу же нужна win-1251, поэтому в market_ya.php она и есть. Разные кодировки, то есть
Когда я копировал у себя в PHP-редакторе функцию vm_transliterate из файла router.php в файл market_ya.php - не подумал об этом (кириллица в моём редакторе отображалась корректно). Но при работе получались ссылки вида http://tvoyport.ru/features/category/product/100 Тепловентиляторы и пушки/13375 МАКАР-ТВ-5/220K.html, а они должны были быть в транслите. То есть функция vm_transliterate не срабатывала. Я тоже не силён в PHP,  пару часов помучал код так и сяк, и так и не понял, в чём дело.

Когда же мне это надоело, и я решил задать вопрос на форуме-скопировал код в свое первое сообщение (от 17.12) - увидел знаки вопроса вместо букв кириллицы, не скажу, что сразу догадался, но заподозрил в чём дело. Потому и говорю, что правильно заданный вопрос - это половина ответа ))

Ну а когда открыл оба файла в блокноте, заново скопипастил vm_transliterate из одного файла в другой, и сохранил market_ya в родной кодировке - всё заработало. Смотри в предыдущем сообщении ссылку.

На самом деле давать такие ответы, блин - это как стрелять в темноту.. по углю. У тебя-то в чём проблема? Какая конфигурация, какой код, что к чему прикрутить хочешь? И какой результат получить? С этого надо бы начинать, а не мучать народ вопросами, на которые неизвестно как отвечать... Толком говори, помочь попробуем...

   



Я не про кодировку, про это все понятно. Для начало понятно вылетела ошибка на  product_artikul - прибил. Например сейчас у меня PHP на  строку   return $res; ругается. Просто хочтся понять куда что вставить в market.php что бы ссылки стали как sef'овые. Сейчас генерится список категорий и все, сами товары не заполняются. Joomla 1.5.22 virt 1.1.3  Код как у тебя только закоментил product_artikul
*

salongin

  • Новичок
  • 9
  • 1 / 0
Например сейчас у меня PHP на  строку   return $res; ругается.

Это ошибка в запросе к БД. Смотри

Код: php
$query = "

SELECT

$tb_product.product_id,

$tb_product.product_name,


... и далее. Но вообще-то если ты закомментил product_artikul под select-oм, то остальное у меня, как в классике, и ошибки не должно быть..

Просто хочтся понять куда что вставить в market.php что бы ссылки стали как sef'овые. Сейчас генерится список категорий и все, сами товары не заполняются. Joomla 1.5.22 virt 1.1.3  Код как у тебя только закоментил product_artikul

Такое тоже было, обрывалось на теге offer. Скорее всего, в строке $url= ... проблема.
Код твой можно глянуть? В личку, или здесь покажи. Желательно и router, и market.
*

a_pesikov

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
Это ошибка в запросе к БД. Смотри

Код: php
$query = "

SELECT

$tb_product.product_id,

$tb_product.product_name,


... и далее. Но вообще-то если ты закомментил product_artikul под select-oм, то остальное у меня, как в классике, и ошибки не должно быть..

Такое тоже было, обрывалось на теге offer. Скорее всего, в строке $url= ... проблема.
Код твой можно глянуть? В личку, или здесь покажи. Желательно и router, и market.

у меня router нету. Есть только market. Просто хочу в него вставить кусок для генерации SEF адресов из кода Даника.
*

a_pesikov

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
В итоге имеем список категорий но без товаров :(

Код
<?xml version='1.0' encoding='windows-1251'?>
<!DOCTYPE yml_catalog SYSTEM 'shops.dtd'>
<yml_catalog date="2010-12-25 16:17">
<shop>
<name>РўРІРѕР№ РїРѕСЂС‚</name>
<company>РўРІРѕР№-РїРѕСЂС‚</company>
<url>http://tvoyport.ru</url>
<currencies>
<currency  id="RUR" rate="1"/>
<currency  id="USD" rate="CBRF"/>
</currencies>
<categories>
<category id="64" parentId="22">Столы журнальные</category>

<category id="60" parentId="59">Столы и стулья пластиковые</category>
<category id="63" parentId="59">Шезлонги</category>
<category id="59">Мебель для дачи</category>
<category id="62" parentId="59">Скамейки</category>
<category id="58" parentId="56">Полки навесные</category>
<category id="61" parentId="59">Садовые качели</category>
<category id="55" parentId="42">Вытяжки кухонные</category>
<category id="57" parentId="56">Этажерки и подставки</category>
<category id="56">Аксессуары</category>

<category id="17">Мебель для прихожей</category>
<category id="18" parentId="17">Прихожие</category>
<category id="19" parentId="17">Наборы для прихожей</category>
<category id="20" parentId="17">Тумбы для обуви</category>
<category id="21" parentId="17">Вешалки</category>
<category id="22">Мебель для гостиной</category>
<category id="23">Мебель для детской</category>
<category id="24" parentId="22">Тумбы под телевизор</category>
<category id="25" parentId="22">Стенки мебельные</category>

<category id="26" parentId="22">Диваны и кресла</category>
<category id="27" parentId="23">Детские кровати</category>
<category id="28" parentId="23">Наборы детской мебели</category>
<category id="29">Мебель для спальни</category>
<category id="30" parentId="29">Комоды</category>
<category id="31" parentId="29">Кровати</category>
<category id="32" parentId="29">Матрасы</category>
<category id="33" parentId="29">Туалетные столики</category>
<category id="34" parentId="29">Тумбы прикроватные</category>

<category id="35" parentId="29">Спальни</category>
<category id="36">Мебель для работы и учебы</category>
<category id="37" parentId="36">Стеллажи</category>
<category id="38" parentId="36">Столы компьютерные</category>
<category id="39" parentId="36">Письменные столы</category>
<category id="40" parentId="36">Стулья и кресла</category>
<category id="41" parentId="36">Тумбы подкатные</category>
<category id="42">Мебель для кухни</category>
<category id="43" parentId="42">Столы книжки</category>

<category id="44" parentId="42">Столы обеденные</category>
<category id="45" parentId="42">Кухонные уголки</category>
<category id="46" parentId="42">Табуреты</category>
<category id="47" parentId="42">Столы сервировочные</category>
<category id="48" parentId="42">Кухонные стулья</category>
<category id="49" parentId="42">Кухонные гарнитуры</category>
<category id="50">Шкафы</category>
<category id="51" parentId="50">Шкафы купе</category>
<category id="52" parentId="50">Шкафы распашные</category>

<category id="53">Предметы интерьера</category>
<category id="54" parentId="53">Кресла качалки</category>
<category id="102" parentId="101">Спальня Арамис</category>
<category id="66" parentId="19">Прихожая Валерия</category>
<category id="67" parentId="19">Прихожая Визит</category>
<category id="68" parentId="19">Прихожая Гранд Кволити</category>
<category id="69" parentId="19">Прихожая Каре</category>
<category id="70" parentId="19">Прихожая Элегант</category>
<category id="71" parentId="19">Прихожая Трио</category>

<category id="72" parentId="19">Прихожая Рондо</category>
<category id="73" parentId="19">Прихожая Рикардо</category>
<category id="74" parentId="19">Прихожая Ривьера</category>
<category id="75" parentId="19">Прихожая Рандеву</category>
<category id="76" parentId="19">Прихожая Орфей</category>
<category id="77" parentId="19">Прихожая Ника</category>
<category id="78" parentId="19">Прихожая Модена 2</category>
<category id="80" parentId="82">Гостиная Верона B4</category>
<category id="81" parentId="82">Гостиная Карина 1</category>

<category id="82" parentId="22">Наборы для гостиной</category>
<category id="83" parentId="82">Гостиная Модена</category>
<category id="84" parentId="82">Стенка Альбера</category>
<category id="85" parentId="82">Стенка ВАЛЕРИЯ</category>
<category id="86" parentId="82">Стенка Терра</category>
<category id="87" parentId="82">Стенка Эрика-4</category>
<category id="88" parentId="28">Детская мебель Апли</category>
<category id="89" parentId="28">Детская мебель Волна</category>
<category id="90" parentId="28">Детская мебель Египет</category>

<category id="91" parentId="28">Детская мебель Капитошка</category>
<category id="92" parentId="28">Детская мебель Модена</category>
<category id="93" parentId="28">Детская мебель Подростковая</category>
<category id="94" parentId="28">Детская мебель Робинзон</category>
<category id="95" parentId="28">Детская мебель Эльф</category>
<category id="96" parentId="28">Детска мебель Джуниор</category>
<category id="97" parentId="28">Детская Мебель Валерия</category>
<category id="99" parentId="28">Детская мебель Мальвина</category>

<category id="100" parentId="28">Детская мебель Радуга</category>
<category id="101" parentId="29">Наборы мебели для спальни</category>
</categories>
<offers>
</offers>
</shop>
</yml_catalog>

Сам код

Код
<?php
//Пропишите для своей БД, пропишите наименование магазина, про адрес www.**********.ru тоже не забудьте
$hostname = "№№№";
$username = "№№№";
$password = "№№№";
$dbName = "№№№";
$category = "№№№";
$category_xref = "№№№";
$userstable = "№№№";
$pricetable = "№№№";
 
$product_category_xref =  "mebmain_vm_product_category_xref";
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
mysql_query("SET SQL_BIG_SELECTS=1");
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://tvoyport.ru</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_thumb_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'];
 
 
 
$name = $row[$i]['category_name'];
 
$alias = vm_transliterate($name);
 
 
 
$alias = strtolower( $alias );
 
$alias = preg_replace('/&.+?;/', '', $alias); // kill entities
 
$alias = str_replace( '_', '-', $alias );
 
$alias = preg_replace('/[^a-z0-9\s-.]/', '', $alias);
 
$alias = preg_replace('/\s+/', '-', $alias);
 
$alias = preg_replace('|-+|', '-', $alias);
 
$alias = trim($alias, '-');
 
 
$hvost = $row[$i]['product_name'];
 
if (preg_match('/[^A-Za-z0-9_\-]/',$hvost)) {
 
 
 
$hvost = vm_transliterate($hvost);
 
$hvost = strtolower($hvost);
 
$hvost = preg_replace('/&.+?;/', '',$hvost); // kill entities
 
$hvost = str_replace( '_', '-',$hvost );
 
$hvost = preg_replace('/[^a-z0-9\s-.]/', '',$hvost);
 
$hvost = preg_replace('/\s+/', '-',$hvost);
 
$hvost = preg_replace('|-+|', '-',$hvost);
 
$hvost = trim($hvost, '-');
 
}
 
$url="http://www.tvoyport.ru/features/category/product/".$row[$i]['category_id']."-".$alias."/".$row[$i]['product_id']."-".$hvost.".html";
 
$product_full_image = "http://www.tvoyport.ru/components/com_virtuemart/shop_image/product/".$row[$i]['product_thumb_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;
 
}
 
function vm_transliterate($name)
{
$tbl= array(
'а'=>'a', 'б'=>'b', 'в'=>'v', 'г'=>'g', 'д'=>'d', 'е'=>'e', 'ж'=>'g', 'з'=>'z',
'и'=>'i', 'й'=>'y', 'к'=>'k', 'л'=>'l', 'м'=>'m', 'н'=>'n', 'о'=>'o', 'п'=>'p',
'р'=>'r', 'с'=>'s', 'т'=>'t', 'у'=>'u', 'ф'=>'f', 'ы'=>'i', 'э'=>'e', 'А'=>'A',
'Б'=>'B', 'В'=>'V', 'Г'=>'G', 'Д'=>'D', 'Е'=>'E', 'Ж'=>'G', 'З'=>'Z', 'И'=>'I',
'Й'=>'Y', 'К'=>'K', 'Л'=>'L', 'М'=>'M', 'Н'=>'N', 'О'=>'O', 'П'=>'P', 'Р'=>'R',
'С'=>'S', 'Т'=>'T', 'У'=>'U', 'Ф'=>'F', 'Ы'=>'I', 'Э'=>'E', 'ё'=>"yo", 'х'=>"h",
'ц'=>"ts", 'ч'=>"ch", 'ш'=>"sh", 'щ'=>"shch", 'ъ'=>"", 'ь'=>"", 'ю'=>"yu", 'я'=>"ya",
'Ё'=>"Yo", 'Х'=>"H", 'Ц'=>"Ts", 'Ч'=>"Ch", 'Ш'=>"Sh", 'Щ'=>"Shch", 'Ъ'=>"", 'Ь'=>"",
'Ю'=>"Yu", 'Я'=>"Ya"
);
 
return strtr($name, $tbl);
 
}
?>
*

salongin

  • Новичок
  • 9
  • 1 / 0
В итоге имеем список категорий но без товаров :(

Для начала попробуй исправить здесь:

Код: php
include '../configuration.php';
*

a_pesikov

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
Для начала попробуй исправить здесь:

Код: php
include '../configuration.php';

не, тут все ок

во чо пишет

Undefined variable: res
типа не определена переменная
« Последнее редактирование: 25.12.2010, 22:07:01 от a_pesikov »
*

salongin

  • Новичок
  • 9
  • 1 / 0
не, тут все ок

хз. В твоём файле так:
Код: php
include 'configuration.php';

в таком виде у меня на локалке эта строка не прокатывает.

исправил на
Код: php
 include '../configuration.php';
;

и больше ничего не трогал - всё работает и выгружает и url рисует...
*

a_pesikov

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
хз. В твоём файле так:
Код: php
include 'configuration.php';

в таком виде у меня на локалке эта строка не прокатывает.

исправил на
Код: php
 include '../configuration.php';
;

и больше ничего не трогал - всё работает и выгружает и url рисует...


С конфигом все ок, у меня именно так должно быть, может из-за того что artikul прибил?
*

salongin

  • Новичок
  • 9
  • 1 / 0
может из-за того что artikul прибил?

Не, это вряд ли.. попробуй ещё проверить, все ли поля, которые под select-ом, у тебя в БД есть..

*

Alex2

  • Захожу иногда
  • 113
  • 6 / 0
Загрузил YML-файл, пытаюсь включить магазин, а они не включают.
Техподдержка пишет
В результате проверки были выявлены следующие критичные ошибки в Вашем yml-файле: не закрыт тег <offers>, отсутствуют товарные предложения. Поэтому заявка не прошла проверку

В файле формируются только категории, а самих товаров нет
Подскажите что не так?

[вложение удалено Администратором]
« Последнее редактирование: 04.01.2011, 13:18:44 от Alex2 »
*

xpyct

  • Захожу иногда
  • 62
  • 0 / 0
Такая же проблема не закрывается тег offers.
Причем если выкачивать YML файл через хром то все нормально, если через мазилу то тег не закрывается.
Разное кол-во товаров выкачивается, может сервак разрывает соединение? у меня товаров порядка 11тыщ.

[вложение удалено Администратором]

Подскажите, как сформировать чпу ссылку  в данном скрипте вида site.ru/magazine-86. Стоит Artio JoomSEF. Подскажите как формируются числа в конце ссылки?
« Последнее редактирование: 24.01.2011, 12:44:54 от abu »
*

Lekarev

  • Захожу иногда
  • 61
  • 0 / 0
Ох... Сегодня всю голову поломал  ^-^
Может кто мне сможет пояснить из за чего подобная фигня может быть ?
Собственно вот:
Гружу в Яшу YML - всё добренько. Без ошибок.
Потом в контроле качества начинают идти на все товары ссылки с ошибкой 404. Ссылки такого плана: http://http://

http://http//******.ru/index.php?page=shop.product_details&flypage=shop.flypage&option=com_virtuemart&product_id=54

И вот так ломаю голову весь день... С раннего утра.
Подскажите что и как сделать, пожалуйста. В прикрепленке размещу скрипт выгрузки. Но вроде там все окей.

Но еще самое интересное, что когда  он включен на пару минут, пока не вырубили, мои товары видны в маркете. На них я нажимаю и попадаю на нужный товар!!

Спешу сообщить !

Думаю кому пригодится:
Проблема была в следующем - я прописал в главной страницы сайта адрес с http://****.ru , а это оказалось категорически нельзя. А в силу, что YML не пойми когда обновляется не понимал в чем причина. Сейчас все обновилось нормально ( я догадывался и вот решил ждать до последнего загрузки последней редакции) и воуля ) Всё добренько )
Не указывайте http://ваш-сайт.ру в главной странице. Без http:// !

Всем хорошей конверсии  *DRINK*

[вложение удалено Администратором]
« Последнее редактирование: 27.01.2011, 22:24:01 от Lekarev »
*

djed9

  • Захожу иногда
  • 116
  • 2 / 0
Народ кто готов помочь прикрутить к маркету за деньги?
*

Lekarev

  • Захожу иногда
  • 61
  • 0 / 0
Народ кто готов помочь прикрутить к маркету за деньги?

Давай я могу помочь. 356-292-795 аська или скайп дать ?
*

Irsn

  • Захожу иногда
  • 83
  • 0 / 0
Доброго времени суток! Подскажите, пожалуйста, где попалась лишняя ковычка? Уже глаза в кучу. В маркете товар выводится вот так: Atoll A-560E" Как убрать ковычки из названия товара? Скрипт взят в этой теме и немного изменен.

Код
<?php

$hostname = "localhost";
$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');
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>#######</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=\"34\"/>\n";
echo"<currency  id=\"EUR\" rate=\"45\"/>\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://#########/index.php?page=shop.product_details&amp;flypage=shop.flypage&amp;option=com_virtuemart&amp;product_id=".$row['product_id'];
$product_full_image = "http://############/components/com_virtuemart/shop_image/product/".$row['product_full_image'];
$product_name = $row['product_name'];
$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";
?>
*

didimon

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
ребят подскажите а как сделать так, чтобы выгружать две например конкретные категории товаров в Яндекс, игнорирую все остальные категории?
*

SlogMan

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Что за ошибка?

Дата из файла: 2011-02-13 10:25 (строка 1, столбец 127)
Фатальная ошибка: Ошибка парсинга XML: Error parsing XML feed: Unterminated entity reference, 'flypage' (строка 43, столбец 66)
*

skyscraper

  • Захожу иногда
  • 252
  • 47 / 2
все у кого есть модули со скидками, могут столкнуться с проблемой двух цен... но разных shopper_group_id
подскажите как поправить таблицу, чтобы цены в YML всегда были от shopper_group_id = 8
пробую, по разному, но как-то не хочет
Цитировать
SELECT
   $tb_product.product_id,
   $tb_product.product_parent_id,
   $tb_product.product_discount_id,
   $tb_product.product_name,
   $tb_product.product_publish,
   $tb_product.custom_attribute,   
   $tb_product_attribute.attribute_name,
   $tb_product_attribute.attribute_value,
   $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.shopper_group_id,
   $tb_price.product_currency,
   $tb_product.product_in_stock,
   $tb_product.product_unit,
   $tb_product.product_thumb_image,
   $tb_product.product_s_desc,
   $tb_product.product_weight
   
FROM
   ($tb_product_category_xref
RIGHT JOIN ($tb_price
ON $tb_price.shopper_group_id = '8' // если так, то ошибка
RIGHT JOIN (($tb_product_mf_xref
RIGHT JOIN $tb_product
ON $tb_product_mf_xref.product_id = $tb_product.product_id)
LEFT JOIN $tb_product_attribute
ON $tb_product_attribute.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)
*

richman

  • Захожу иногда
  • 50
  • 1 / 0
Немного доработал скрипт для более комфортной установки и оптимизировал запросы к базе.

Доработки:
1. Подключение к настройкам Joomla (теперь не надо прописывать реквизиты доступа к БД, а достаточно указать конфигурационный файл 'configuration.php')
2. Добавлены комментарии для новичков
3. ВЫБОРКА ВСЕХ ТОВАРОВ ПРОИСХОДИТ ОДНИМ ЗАПРОСОМ!
4. Добавлен шаблон для описания товара (тег <description>)
5. Rурсы валют, приравнены к курсу ЦБРФ
6. Добавлен тег "доставка" (просто мне он нужен, а Вы решайте сами)
а также: форматирование для удобства кода и вывода и еще что то по мелочам.

Проверялось на Joomla! 1.5.9 Production/Stable / VirtueMart 1.1.2 stable


Скрипт в целом работает, но проблема с подтоварами. Яндекс ругается, что у подтоваров неизвестная категория:
Цитировать
Ошибка: Для предложения указана неизвестная категория: (строка 188, столбец 9)
Ошибка: Предложение отклонено: http://
и не пропускает данный товар в свою базу.

В YML тег категории пустым получается:
Код
<categoryId></categoryId>

Понятно, что VirtueMart устроен так, что подтовары относятся к основному товару и к той категории, где он находится. Но как это объяснить Яндексу?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

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