Created
August 9, 2012 15:14
-
-
Save fomigo/3305045 to your computer and use it in GitHub Desktop.
YML export for miniShop
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$siteName = $modx->getOption('siteName', $scriptProperties, $modx->getOption('site_name')); // Имя сайта | |
$companyName = $modx->getOption('companyName', $scriptProperties, $modx->getOption('site_name')); // Компания | |
$bid = $modx->getOption('bid', $scriptProperties, 10); // Цена за клик | |
$categoriesTpl = $modx->getOption('minishop.categories_tpl'); // Шаблоны категорий | |
$goodsTpl = $modx->getOption('minishop.goods_tpl'); // Шаблоны товаров | |
$siteUrl = $modx->makeUrl($modx->getOption('site_start'), '', '', 'full'); // Ссылка на главную страницу сайта | |
$descTpl = strip_tags($modx->getOption('descTpl', $scriptProperties, '[[+description]]')); // Шаблон для описания товара, без html | |
// Параметры товаров | |
$paramsIn = $modx->getOption('paramsIn', $scriptProperties, 'ms'); // Где искать параметры товаров | |
$warehouse = $modx->getOption('warehouse', $scriptProperties, 1); // Склад, нужен только если параметры в ModGoods | |
$paramPrice = $modx->getOption('paramPrice', $scriptProperties, 'price'); // Цена | |
$paramImage = $modx->getOption('paramImage', $scriptProperties, 'img'); // Картинка | |
$paramCurrency = $modx->getOption('paramCurrency', $scriptProperties, 'RUR'); // Валюта | |
$paramDelivery = $modx->getOption('paramDelivery', $scriptProperties, 'true'); // Доставка, по умолчанию - да. Можно указать имя параметра. | |
////////////////////////////////////////////////////////////////////////////// | |
// Заголовок выгрузки | |
$yml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; | |
$yml .= "<!DOCTYPE yml_catalog SYSTEM \"shops.dtd\">\n"; | |
$yml .= "<yml_catalog date=\"".date('Y-m-d H:i')."\">\n"; | |
$yml .= " <shop>\n"; | |
$yml .= " <name>$siteName</name>\n"; | |
$yml .= " <company>$companyName</company>\n"; | |
$yml .= " <url>$siteUrl</url>\n"; | |
// Курсы валют, приравнены к курсу ЦБРФ | |
$yml .= " <currencies>\n"; | |
$yml .= " <currency id=\"RUR\" rate=\"1\"/>\n"; | |
$yml .= " <currency id=\"USD\" rate=\"CBRF\"/>\n"; | |
$yml .= " <currency id=\"EUR\" rate=\"CBRF\"/>\n"; | |
$yml .= " </currencies>\n"; | |
// Секция категорий | |
$sql = "SELECT `id`,`parent`,`pagetitle` FROM {$modx->getTableName('modResource')} WHERE `template` IN ($categoriesTpl) AND `published` = 1 AND `deleted` != 1 AND `parent` != 0 ORDER BY `menuindex` ASC"; | |
$q = new xPDOCriteria($modx, $sql); | |
if ($q->prepare() && $q->stmt->execute()){ | |
$categories = $q->stmt->fetchAll(PDO::FETCH_ASSOC); // Все ресурсы-категории | |
// Получем все ID категорий | |
$categoriesIds = array(); | |
foreach ($categories as $v) { | |
$categoriesIds[] = $v['id']; | |
} | |
} | |
$yml .= " <categories>\n"; | |
foreach ($categories as $v) { | |
if (in_array($v['parent'], $categoriesIds)) { | |
$yml .= ' <category id="'.$v['id'].'" parentId="'.$v['parent'].'">'.$v['pagetitle'].'</category>'."\n"; | |
} | |
else { | |
$yml .= ' <category id="'.$v['id'].'">'.$v['pagetitle'].'</category>'."\n"; | |
} | |
} | |
$yml .= " </categories>\n"; | |
// Секция описания товаров | |
if ($paramsIn == 'ms') { | |
if (!isset($modx->miniShop) || !is_object($modx->miniShop)) { | |
$modx->miniShop = $modx->getService('minishop','miniShop', $modx->getOption('core_path').'components/minishop/model/minishop/', array()); | |
if (!($modx->miniShop instanceof miniShop)) return ''; | |
} | |
if ($paramDelivery != 'true' && $paramDelivery != 'false') {$delivery = ",`ModGoods`.`$paramDelivery` as `delivery`";} | |
$sql = "SELECT `modResource`.`id`,`parent`,`pagetitle`,`longtitle`,`description`,`introtext`, | |
`ModGoods`.`$paramImage` as `image`, `ModGoods`.`$paramPrice` as `price` $delivery | |
FROM {$modx->getTableName('modResource')} as `modResource` | |
LEFT JOIN {$modx->getTableName('ModGoods')} as `ModGoods` ON (`modResource`.`id` = `ModGoods`.`gid` AND `wid` = $warehouse) | |
WHERE `template` IN ($goodsTpl) AND `published` = 1 AND `deleted` != 1 | |
ORDER BY `pagetitle` ASC"; | |
$q = new xPDOCriteria($modx, $sql); | |
if ($q->prepare() && $q->stmt->execute()){ | |
$goods = $q->stmt->fetchAll(PDO::FETCH_ASSOC); | |
} | |
} | |
else { | |
if (!is_int($paramPrice)) { | |
if ($tmp = $modx->getObject('modTemplateVar', array('name' => $paramPrice))) { | |
$paramPrice = $tmp->get('id'); | |
} | |
} | |
if (!is_int($paramImage)) { | |
if ($tmp = $modx->getObject('modTemplateVar', array('name' => $paramImage))) { | |
$paramImage = $tmp->get('id'); | |
} | |
} | |
if ($paramDelivery != 'true' && $paramDelivery != 'false') { | |
if (!is_int($paramDelivery)) { | |
if ($tmp = $modx->getObject('modTemplateVar', array('name' => $paramDelivery))) { | |
$paramDelivery = $tmp->get('id'); | |
} | |
} | |
} | |
$sql = "SELECT `modResource`.`id`,`parent`,`pagetitle`,`longtitle`,`description`,`introtext`, | |
`tmplvarid`,`contentid`,`value` | |
FROM {$modx->getTableName('modResource')} as `modResource` | |
LEFT JOIN {$modx->getTableName('modTemplateVarResource')} as `modTemplateVarResource` ON (`modResource`.`id` = `modTemplateVarResource`.`contentid`) | |
WHERE `template` IN ($goodsTpl) AND `published` = 1 AND `deleted` != 1 | |
ORDER BY `pagetitle` ASC"; | |
$q = new xPDOCriteria($modx, $sql); | |
if ($q->prepare() && $q->stmt->execute()){ | |
$tmp = $q->stmt->fetchAll(PDO::FETCH_ASSOC); | |
} | |
$goods = array(); | |
foreach ($tmp as $v) { | |
if (!array_key_exists($v['id'], $goods)) { | |
$goods[$v['id']] = array( | |
'id' => $v['id'] | |
,'parent' => $v['parent'] | |
,'pagetitle' => $v['pagetitle'] | |
,'longtitle' => $v['longtitle'] | |
,'description' => $v['longtitle'] | |
,'introtext' => $v['longtitle'] | |
,'delivery' => !is_int($paramDelivery) ? $paramDelivery : '' | |
); | |
} | |
if ($v['tmplvarid'] == $paramPrice) {$goods[$v['id']]['price'] = $v['value'];} | |
if ($v['tmplvarid'] == $paramImage) {$goods[$v['id']]['image'] = $v['value'];} | |
if ($v['tmplvarid'] == $paramDelivery && empty($goods[$v['id']]['delivery'])) {$goods[$v['id']]['delivery'] = $v['value'];} | |
} | |
} | |
$yml .= " <offers>\n"; | |
foreach ($goods as $v) { | |
$image = preg_match('/^http/i', $v['image']) ? $v['image'] : $siteUrl.$v['image']; | |
$delivery = $paramDelivery == 'true' || $paramDelivery == 'false' ? $paramDelivery : $v['delivery']; | |
$pl = array('[[+pagetitle]]','[[+longtitle]]','[[+description]]','[[+introtext]]'); | |
$vl = array($v['pagetitle'],$v['longtitle'],$v['description'],$v['introtext']); | |
$description = str_replace($pl, $vl, $descTpl); | |
$yml .= " <offer id=\"".$v['id']."\" available=\"true\" bid=\"$bid\">\n"; | |
$yml .= " <url>".$modx->makeUrl($v['id'],'','','full')."</url>\n"; | |
$yml .= " <price>".$v['price']."</price>\n"; | |
$yml .= " <currencyId>".$paramCurrency."</currencyId>\n"; | |
$yml .= " <categoryId>".$v['parent']."</categoryId>\n"; | |
$yml .= " <picture>".$image."</picture>\n"; | |
$yml .= " <delivery>".$delivery."</delivery> \n"; | |
$yml .= " <name>".$v['pagetitle']."</name>\n"; | |
$yml .= " <description>".$description."</description>\n"; | |
$yml .= " </offer>\n"; | |
} | |
$yml .= " </offers>\n"; | |
$yml .= " </shop>\n"; | |
$yml .= "</yml_catalog>\n"; | |
return $yml; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment