Новости Joomla

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

jorevo

  • Давно я тут
  • 595
  • 13 / 1
А значит в плагине можно вывести $post['alias_'.$lang->language] и посмотреть содержимое - Это и есть тот псевдоним, который сохраняется в базу.

То есть его можно и поменять посредством $post['alias_'.$lang->language] = "алиас"?

ЗЫ. Нифига не фурычит. Конструкция $post['alias_'.$lang->language] тоже выдаёт пустоту. (
« Последнее редактирование: 21.10.2014, 23:08:11 от jorevo »
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Цитировать
То есть его можно и поменять
как раз для этого и ставим & перед переменной. чтобы внутри плагина можно было менять то, на что она ссылается.

Цитировать
Конструкция $post['alias_'.$lang->language] тоже выдаёт пустоту
ну так а $lang определили в плагине также как в контроллере? либо JFactory::getLanguage()->getTag() используйте чтобы узнать текущий язык
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

jorevo

  • Давно я тут
  • 595
  • 13 / 1
ну так а $lang определили в плагине также как в контроллере? либо JFactory::getLanguage()->getTag() используйте чтобы узнать текущий язык

Дмитрий, я если честно уже порядком запутался и изрядно задолбался проверять всё возможные варианты. ) Задача прикладная и вобщем то меня вполне устраивает жоско прописанный "alias_ru-RU". Единственно чего бы реально хотелось - проверки на существующий алиас, чтобы перепрописывать его если он не задан. Может проще решить проблему "в лоб" - через запрос к базе? Что то типа SELECT * FROM `#__jshopping_products` AS `alias_ru-RU` WHERE `product_id` = '.$product->product_id;? Только непонятно что с этим дальше делать?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
ну так а что даст запрос такой? вы хотите проверить алиас который уже сохранен в товаре? или все таки проверить, не ввели ли руками алиас и хотим его сохранить? для второго случая я вроде писал что проверять - $_POST['alias_ru-RU']
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

jorevo

  • Давно я тут
  • 595
  • 13 / 1
Я хочу, чтобы плагин себя вёл как и сам ЖШ, но алиас прописывал по своим правилам. То есть, если алиаса нет - формировать его, если есть - ничего не делать, если при редактировании товара с прописанным алиасом очистить поле с алиасом - сформировать его.
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
это я понял. вроде как все что нужно сделать для этого уже написал. что именно не получается?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

jorevo

  • Давно я тут
  • 595
  • 13 / 1
А почему в функцию onBeforeDisplaySaveProduct(&$post, &$product) не передаётся $product->product_id? Он тоже позже определяется?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
product_id доступен только если товар был сохранен ранее. т.е. если сохраняете существующий товар после редактирования. а если добавляете новый товар, то в onBeforeDisplaySaveProduct product_id пока не определен. а вот в onAfterSaveProduct он уже будет доступен
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

jorevo

  • Давно я тут
  • 595
  • 13 / 1
Дело в том, что я сохраняю существующий товар, но передаётся пустота. Это для onBeforeDisplaySaveProduct. Для onAfterSaveProduct $product->product_id передаётся правильно, но не передаётся $post... замкнутый круг.
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
хм, точно. product_id заносится в $product уже после onBeforeDisplaySaveProduct. ну тогда можно получить его как $post['product_id']
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

jorevo

  • Давно я тут
  • 595
  • 13 / 1
я вроде писал что проверять - $_POST['alias_ru-RU']

Вот так наконец то заработало как надо! А чем отличается $_POST['alias_ru-RU'] от $post['alias_ru-RU']?

ЗЫ. Не совсем как надо... Как быть с вновь создаваемыми товарами?
« Последнее редактирование: 22.10.2014, 13:59:49 от jorevo »
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
да.. с новыми засада... ну значит все таки надо onAfterSaveProduct. $_POST['alias_ru-RU'] будет доступен там. если делать еан на основе ид товара - получается придется пожертвовать одни запросом. вообще по хорошему можно разделить логику, и если товар сохранен, то менять еан в onBeforeDisplaySaveProduct без доп. запроса, а если новый - то в onAfterSaveProduct с доп. запросом. но думаю это чересчур :)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

jorevo

  • Давно я тут
  • 595
  • 13 / 1
по хорошему можно разделить логику, и если товар сохранен, то менять еан в onBeforeDisplaySaveProduct без доп. запроса, а если новый - то в onAfterSaveProduct с доп. запросом. но думаю это чересчур :)

Да я пошёл по этому пути, добавил обработчик onAfterSaveProduct (как в изначальной версии с записью в базу), но пока немного запутался с условиями. Нет какого нибудь флага, который бы показывал редактируется ли старый товар или добавляется новый?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
так просто проверяйте $_POST['product_id'] . если определен - значит старый, если нет - значит новый
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

jorevo

  • Давно я тут
  • 595
  • 13 / 1
так просто проверяйте $_POST['product_id'] . если определен - значит старый, если нет - значит новый

Дело в том, что в обработчик onAfterSaveProduct посредством $_POST['product_id'] (для новых товаров) тоже передаётся пустой ID... затык не в том как определить новый товар или старый, а в том как получить этот самый ID для новых товаров!
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
в событии onAfterSaveProduct $product->product_id и в случае с новым, и в случае с существующим товаром уже содержит ид товара.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

jorevo

  • Давно я тут
  • 595
  • 13 / 1
Дмитрий, огромное спасибо за долготерпение. Всё сложилось наконец то. Не стал мудрить с проверками, всё внёс в обработчик onAfterSaveProduct с записью в базу. Вот что в результате получилось:

Код
<?php
defined('_JEXEC') or die('Restricted access');

class plgJshoppingAdminAutoAlias extends JPlugin
{
public function __construct(&$subject, $config)
{
parent::__construct($subject, $config);
}

function onAfterSaveProduct(&$product)
{
if ($_POST['alias_ru-RU'] == '')
{
$db = JFactory::getDBO();
$query = 'UPDATE `#__jshopping_products` SET `alias_ru-RU` = "'.$this->params->get('prefix','').str_pad($product->product_id, 6, '0', STR_PAD_LEFT).'" WHERE `product_id` = '.$product->product_id;
$db->setQuery($query);
$db->query();
}
}
}

Суть всего этого - генерация алиаса по своим правилам. За основу был взят плагин auto_ean выложенный кем то, где то здесь (в реквизитах указан http://www.pozitiv-studio.ru). С языками морочиться не стал, кому надо - разбирайтесь сами. Добавил автоматическое включение плагина при инсталляции. Критика приветствуется. )
« Последнее редактирование: 23.10.2014, 11:57:29 от jorevo »
*

jorevo

  • Давно я тут
  • 595
  • 13 / 1
Ещё одна фишечка всплыла. На onAfterSaveProduct не действует настройка "Автоматически сохранять псевдоним" - то есть обработчик вызывается вне зависимости от того, стоит галочка или нет. Как добавить проверку на эту настройку?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Код: php
JSFactory::getConfig()->create_alias_product_category_auto
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

jorevo

  • Давно я тут
  • 595
  • 13 / 1
Да, спасибо... я как раз сам нашёл. Теперь такой код:

Код
<?php
defined('_JEXEC') or die('Restricted access');

class plgJshoppingAdminAutoAlias extends JPlugin
{
public function __construct(&$subject, $config)
{
parent::__construct($subject, $config);
}

function onAfterSaveProduct(&$product)
{
       $jshopConfig = JSFactory::getConfig();

if ($jshopConfig->create_alias_product_category_auto && $_POST['alias_ru-RU'] == '')
{
$db = JFactory::getDBO();
$query = 'UPDATE `#__jshopping_products` SET `alias_ru-RU` = "'.$this->params->get('prefix','').str_pad($product->product_id, 6, '0', STR_PAD_LEFT).'" WHERE `product_id` = '.$product->product_id;
$db->setQuery($query);
$db->query();
}
}
}
*

lunwer

  • Осваиваюсь на форуме
  • 42
  • 0 / 0
Виноват... Невнимателен...Как там!? Немного воображения и логики? :)
\administrator\components\com_jshopping\controllers\products.php
Функция save, ищем следующий текст примерно 519 строка.

Ниже добавляем
Код
        if (!$post['product_ean']) {
        $manufacturer_id = 0;
        if (isset($post['product_manufacturer_id'])){
        $manufacturer_id = $post['product_manufacturer_id'];
        }
        $product->product_ean = "M[".$manufacturer_id."]P[".$product_id."]";
        }
        if (!$product->store()){
            JError::raiseWarning("",_JSHOP_ERROR_SAVE_DATABASE."<br>".$product->_error);
            $this->setRedirect("index.php?option=com_jshopping&controller=products&task=edit&product_id=".$product->product_id);
            return 0;
        }
Радуемся результату.



кто подскажет, как сделать чтобы при копировании код брался из ID товара? Может кто то делал что то подобное?
*

dss

  • Захожу иногда
  • 62
  • 0 / 0
Вообще в компоненте куча событий для плагинов.
Зачем хакать его?
Доброго времени суток.
В каждом товаре прописывать код товара - не вариант.
Какой существует плагин для автоматической генерации кода товара, хотя бы id товара .... инет перерыл, неужели тол ко хакать?
Напишите, пожалуййста, о какие плагины Вы имеете ввиду? Спасибо
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
возьмите например https://nevigen.com/ru/seo-joomshopping/massovoe-zapolnenie-aliasov-dlya-joomshopping.html, и переделайте алиас на код товара
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

dss

  • Захожу иногда
  • 62
  • 0 / 0
возьмите например https://nevigen.com/ru/seo-joomshopping/massovoe-zapolnenie-aliasov-dlya-joomshopping.html, и переделайте алиас на код товара
ну выбрал я все товары, нажал генерация алиасов. как были пустыми поля код товара- так и остались... может что-то другое посоветуете... уж больно не хочется хакать компонент вручную, заставляя id = код товара...
*

dss

  • Захожу иногда
  • 62
  • 0 / 0
возьмите например https://nevigen.com/ru/seo-joomshopping/massovoe-zapolnenie-aliasov-dlya-joomshopping.html, и переделайте алиас на код товара
как переделать алиас на код товара? спасибо
*

nevigen

  • Moderator
  • 10431
  • 862 / 25
  • http://n*****n.com
запросом в базу сделайте
ean = id
или импортом-экспортом назначьте
если разово.

но это не даст автоматичности в будущем.
надо писать плагин который будет ловить событие сохранения и прописывать то что надо вам.
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

dss

  • Захожу иногда
  • 62
  • 0 / 0
запросом в базу сделайте
ean = id
или импортом-экспортом назначьте
если разово.

но это не даст автоматичности в будущем.
надо писать плагин который будет ловить событие сохранения и прописывать то что надо вам.

Спасибо за ответ.
А есть ли такой плагин? и, если нет, как добавить это событие в ручную?
Выше указанный вариант на Ваш вкус сойдет?

\administrator\components\com_jshopping\controllers\products.php
Функция save, ищем следующий текст примерно 519 строка.

Ниже добавляем
Код:
Код: php
 if (!$post['product_ean']) {
        $manufacturer_id = 0;
        if (isset($post['product_manufacturer_id'])){
        $manufacturer_id = $post['product_manufacturer_id'];
        }
        $product->product_ean = "M[".$manufacturer_id."]P[".$product_id."]";
        }
        if (!$product->store()){
            JError::raiseWarning("",_JSHOP_ERROR_SAVE_DATABASE."<br>".$product->_error);
            $this->setRedirect("index.php?option=com_jshopping&controller=products&task=edit&product_id=".$product->product_id);
            return 0;
        }
Радуемся результату.
*

Vanha

  • Новичок
  • 4
  • 0 / 0
Здравствуйте. Подскажите пожалуйста как в этом коде заменить id производителя на id категории

if (!$post['product_ean']) {
        $manufacturer_id = 0;
        if (isset($post['product_manufacturer_id'])){
        $manufacturer_id = $post['product_manufacturer_id'];
        }
        $product->product_ean = "M[".$manufacturer_id."]P[".$product_id."]";
        }
        if (!$product->store()){
            JError::raiseWarning("",_JSHOP_ERROR_SAVE_DATABASE."<br>".$product->_error);
            $this->setRedirect("index.php?option=com_jshopping&controller=products&task=edit&product_id=".$product->product_id);
            return 0;
        }
*

nevigen

  • Moderator
  • 10431
  • 862 / 25
  • http://n*****n.com
а если товар в 2+ категориях ?
производитель точно всегда 1.
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

Vanha

  • Новичок
  • 4
  • 0 / 0
Здравствуйте. Признаюсь я только начал осваивать и Joomla и JoomShopping.
В панели управления заметил, что созданные категории товаров имеют вот такой вид:

/index.php?option=com_jshopping&controller=categories&task=edit&category_id=1
/index.php?option=com_jshopping&controller=categories&task=edit&category_id=2
и.т.д
Вот и подумал, что category_id можно тоже использовать для создания кода товара.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Условие для кол-ва товара больше нуля

Автор kik84

Ответов: 3
Просмотров: 260
Последний ответ 16.02.2024, 13:33:24
от kit2m2
WT On fly image handler изображения товара JoomShopping в webp на лету

Автор sergeytolkachyov

Ответов: 9
Просмотров: 1458
Последний ответ 17.10.2023, 12:40:19
от sergeytolkachyov
Убрать модуль в карточке товара JoomShopping

Автор alexkraym

Ответов: 35
Просмотров: 4412
Последний ответ 21.08.2023, 07:17:53
от delchev
Проблема с фото в карточке товара

Автор astapon

Ответов: 18
Просмотров: 1617
Последний ответ 24.04.2023, 12:37:50
от kit2m2
Убрать ссылку в названии товара

Автор Jinrou

Ответов: 12
Просмотров: 1558
Последний ответ 13.03.2023, 06:48:07
от kit2m2