[quote name=‘dbazhenov’ timestamp=‘1439804190’ post=‘226944’]
Я не совсем понимаю, что имеется ввиду под виджетом и где он будет размещаться.
Вы говорили, что это на своём сайте, можно хотябы пример или набросок.
[/quote]
Вот например:
http://maash.ru/inde…d=23&Itemid=224
[quote name=‘Bat1’ timestamp=‘1439804576’ post=‘226946’]
Вот например:
http://maash.ru/inde…d=23&Itemid=224
[/quote]
Можно smarty функцию сделать или тег [product:12] , который будет заменяться контроллером на любой товарный блок автоматом.
Вот в этом-то и был в общем-то весь вопрос - как?
Тот сайт на joomla, и сейчас там работает plugin который преобразует строку “{price: 021002}” в реальную цену и ссылку, запрашивая цену в базе данных старого магазина. Вот его-то я и хотел заменить виджетом.
[quote name=‘Bat1’ timestamp=‘1439805710’ post=‘226949’]
Вот в этом-то и был в общем-то весь вопрос - как?
Тот сайт на joomla, и сейчас там работает plugin который преобразует строку “{price: 021002}” в реальную цену и ссылку, запрашивая цену в базе данных старого магазина. Вот его-то я и хотел заменить виджетом.
[/quote]
- Определитесь где будете вставлять такие виджеты.
- Например, это будут обычные страницы, в контроллере проверяем описание на наличие тега и если есть тег то заменяем.
Вот такой plugin для joomla вышел. Конечно решение в лоб, и комбинации опций более чем прямолинейны, но для моего каталога вполне достаточно. Выкладываю, вдруг кому еще пригодится.
Пример работы http://maash.ru/inde…=21&Itemid=225. Цены списком это опции. Цена без списка это товар без опций.
ps: Надеюсь появится время, и уже поковыряюсь с контроллерами и виджетами в cs-cart, сейчас главное чтобы хоть что-то было работающее.
[spoiler]
[code]
defined('_JEXEC') or die('Доступ запрещен.');
jimport('joomla.plugin.plugin');
class plgContentPrice extends JPlugin {
public function onContentPrepare($context, &$article, &$params, $page = 0) {
if (isset($article->text))
$this->doPrice($article->text, $this->params);
}
protected function doPrice(&$text, &$params) {
$options = array(
'driver' => 'mysqli',
'host' => '**********',
'user' => '**********',
'password' => '**********',
'database' => '**********',
'prefix' => '**********');
// хостинг не дает подключаться к локальной базе по удаленному адресу - подключаемся к localhost
$ip = gethostbyname($options['host']);
if ($ip == $_SERVER['SERVER_ADDR']) {
$options['host'] = '127.0.0.1';
}
$db = null;
$query = null;
while (preg_match('~\{price\s+(\d+)\s*}~i', $text, $found)) {
$product_code = $found[1];
try {
if (!$db) {
$db = JDatabaseDriver::getInstance($options);
}
if (!$query) {
$query = $db->getQuery(true);
}
$query->clear();
$query->select('p.product_id, pp.price');
$query->from('#__products as p');
$query->join('left', '#__product_prices as pp on pp.product_id = p.product_id');
$query->where('p.product_code = ' . $db->quote($product_code));
$db->setQuery((string)$query);
$result = $db->loadAssoc();
$product_id = $result['product_id'];
$price = $result['price'];
$query->clear();
$query->select('v.option_id, v.variant_id, v.modifier, v.modifier_type, d.variant_name');
$query->from('#__product_option_variants as v');
$query->join('left', '#__product_option_variants_descriptions as d on d.variant_id = v.variant_id');
$query->where('v.option_id in (select o.option_id '.
'from #__product_options as o '.
'where o.product_id = ' . $product_id . ')');
$query->order('v.`position`');
$db->setQuery((string)$query);
$result = $db->loadAssocList();
if (count($result) == 0) {
$decimal = round($price) == $price ? 0 : 2;
$priceText = '' . str_replace('#', ' ', number_format($price, $decimal, ',', ' ')) . ' руб. (' .
'заказать)';
}
else {
$priceText = '
- ';
- ' . $variant_name . ' - ';
if ($modifier_type == 'A') {
$value = $price + $modifier;
$decimal = round($value) == $value ? 0 : 2;
$priceText .= number_format($value, $decimal, ',', ' ') . ' руб.';
}
else
$priceText .= 'обратитесь к администратору сайта';
$priceText .= ' ';
foreach ($result as $item) {
$variant_name = $item['variant_name'];
$modifier = $item['modifier'];
$modifier_type = $item['modifier_type'];
$priceText .= '
}
$priceText .= '
$priceText .= '';
}
} catch (RuntimeException $e) {
$priceText = 'Не удалось узнать цену';
}
$text = str_replace($found[0], $priceText, $text);
}
}
}
[/code]
[/spoiler]