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

zahar_92

  • Захожу иногда
  • 246
  • 8 / 0
Всем привет!
Не отображается стандартный модуль последних товаров. При публикации модуля получаю ошибку
Код
Fatal error: Call to a member function setModel() on boolean in /var/www/market.ru/modules/mod_jshopping_latest_products/mod_jshopping_latest_products.php on line 70
В этом районе код такой
Код
	
addLinkToProducts($rows, 0, 1);

$productlist = JSFactory::getModel('productList', 'jshop');
$productlist->setModel($product);
$productlist->load();

if ($enable_addon){
$dispatcher->trigger('onBeforeDisplayProductList', array(&$rows));
$view = new stdClass();
$view->rows = $rows;
$dispatcher->trigger('onBeforeDisplayProductListView', array(&$view, &$productlist));
$rows = $view->rows;
}
Если закомментировать строки
Код
//$productlist = JSFactory::getModel('productList', 'jshop');
//$productlist->setModel($product);
//$productlist->load();
то все вроде ок, модуль появляется, товары отображаются. Но на сколько это решение верное и за что отвечают эти строки? Не наврежу ли я такими действиями?
*

dmitry_stas

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

zahar_92

  • Захожу иногда
  • 246
  • 8 / 0
какая у вас версия ЖШ?
Пардон, забыл.. Joomla 3.9.8 , JS 4.18.3
От сюда качали модуль?
Да, версия 4.1.4
4.1.3 тоже ставил, результат тот же.
*

passer

  • Давно я тут
  • 957
  • 74 / 3
JSFactory::getModel('productList', 'jshop')
Не находит он эту модель. Она есть вообще?
*

zahar_92

  • Захожу иногда
  • 246
  • 8 / 0
JSFactory::getModel('productList', 'jshop')
Не находит он эту модель. Она есть вообще?
Как это проверить? Модуль публикую на главной. Сам компонент на другой странице.

На страницах JS (категория, товар), модуль работает штатно, без ошибок.
« Последнее редактирование: 19.06.2019, 18:52:46 от zahar_92 »
*

ST_Rage

  • Новичок
  • 16
  • 0 / 0
Цитировать
Как это проверить?
В коде вашего шаблона. В самом начале файла index.php.
*

zahar_92

  • Захожу иногда
  • 246
  • 8 / 0
В коде вашего шаблона. В самом начале файла index.php.
Шаблон protostar. На сколько я понимаю, в шаблоне Joomla эта модель не должна присутствовать. Повторюсь, если на странице присутствует компонент JS,  то модуль работает как надо, если нет компонента, не работает. Причем модуль бестселлеры работает нормально.
*

D. Tkachenko

  • Осваиваюсь на форуме
  • 26
  • 3 / 0
Если закомментировать строки
Код
//$productlist = JSFactory::getModel('productList', 'jshop');
//$productlist->setModel($product);
//$productlist->load();
то все вроде ок, модуль появляется, товары отображаются. Но на сколько это решение верное и за что отвечают эти строки? Не наврежу ли я такими действиями?

Если нигде в плагинах вот этот триггер не используется - не навредите (он ниже по коду).

Код
$dispatcher->trigger('onBeforeDisplayProductListView', array(&$view, &$productlist));

Но его лучше тогда либо тоже закомментировать, либо переписать под старую версию так:

Код
$dispatcher->trigger('onBeforeDisplayProductListView', array(&$view));

По сути вопроса - и не должно было работать. Ибо откуда Joomla знает где искать модель компонента, когда последний не подгружен и не указан в классе JSFactory. Можно еще решить вот так (без комментирования), вставит в модуле где-нибудь до:

Код
$productlist = JSFactory::getModel('productList', 'jshop');

следующий код:

Код
JLoader::import('productlist', JPATH_ROOT.'/components/com_jshopping/models');

Тогда модель будет определяться верно на любой странице и весь код будет работать верно.
Ошибка не ваша, конечно, а разработчиков, но чтобы было понятно - разжевал.
Завтра напишу им багрепорт на форум.
*

dmitry_stas

  • Легенда
  • 12838
  • 1203 / 8
следующий код:
лучше тогда
Код
JModelLegacy::addIncludePath(JPATH_SITE . '/components/com_jshopping/models');
вдруг еще какую модель захочется подключить
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

D. Tkachenko

  • Осваиваюсь на форуме
  • 26
  • 3 / 0
лучше тогда
Код
JModelLegacy::addIncludePath(JPATH_SITE . '/components/com_jshopping/models');
вдруг еще какую модель захочется подключить

Да, и подключить модели прям в factory.php. Как раз собираюсь им об этом написать. А если только в модуле, как по мне, все же лучше явно подключать модель, чтобы путаницы не было. В целом, вообще не понимаю целесообразности того кода что они добавили. Мало того, что он там явно лишний и создает дополнительную ненужную нагрузку на БД, так еще и ломает плагины написанные под старую версию триггера.

Я бы рекомендовал просто закомментировать код и изменить триггер как было раньше. Или использовать стабильную более старую версию модуля.
*

dmitry_stas

  • Легенда
  • 12838
  • 1203 / 8
так еще и ломает плагины написанные под старую версию триггера
ну раньше 1 параметр передавался, а сейчас 2. в любом случае надо переделывать. и разве передача большего количества параметров в плагин ломает его? по моему больше можно, меньше нельзя.

Я бы рекомендовал просто закомментировать код и изменить триггер как было раньше.
если есть плагины, которые требуют 2 параметра, это точно так же выкинет исключение. тогда плагины надо переделывать, делать в методе второй параметр необязательным. но тоже вопрос - а если плагину нужна модель, он с ней работает?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

D. Tkachenko

  • Осваиваюсь на форуме
  • 26
  • 3 / 0
Вы тоже, товарищи, пишите багрепорты, если обнаружили ошибку. Тестировали ведь на последних версиях, значит явно баг с их стороны. Админ там с переводом с русского на английский дружит, я даже не заморачиваюсь - пишу на русском (т.к., с разговорным английским не супер). Так что не стесняйтесь - помогайте сообществу.

Надеюсь, вскоре поправят.
https://www.joomshopping.com/forum/posts/12/13776.html?lang=ru
*

D. Tkachenko

  • Осваиваюсь на форуме
  • 26
  • 3 / 0
ну раньше 1 параметр передавался, а сейчас 2. в любом случае надо переделывать. и разве передача большего количества параметров в плагин ломает его? по моему больше можно, меньше нельзя.
если есть плагины, которые требуют 2 параметра, это точно так же выкинет исключение. тогда плагины надо переделывать, делать в методе второй параметр необязательным. но тоже вопрос - а если плагину нужна модель, он с ней работает?

Вы правы, если передать больше параметров - исключения ошибки не будет. Или забыл или не знал. Я считаю так лучше не делать. С точки зрения стандарта - неправильно вызывать метод передавая ему больше параметров чем у него. Работает, наверное, потому что используется свой механизм распаковки массива в CMS.

А передавать меньше параметров вполне можно и соответствует стандарту. Достаточно в плагине объявить параметры по умолчанию. Например:

function onBefore...($product, $limit=12)

По поводу модели, если триггер срабатывает с компонента где эта модель подключена, то вызов getModel отработает в плагине корректно. А если триггер одного компонента, а в плагине getModel другого компонента, то без JLoader::import не обойтись, иначе будет также как с модулем по теме.

P.S. Ну, да, вы же за необязательный аргумент и написали. Прочитал невнимательно, неправильно понял.
« Последнее редактирование: 23.06.2019, 14:22:26 от D. Tkachenko »
*

D. Tkachenko

  • Осваиваюсь на форуме
  • 26
  • 3 / 0
Вы правы, если передать больше параметров - исключения ошибки не будет. Или забыл или не знал. Я считаю так лучше не делать. С точки зрения стандарта - неправильно вызывать метод передавая ему больше параметров чем у него. Работает, наверное, потому что используется свой механизм распаковки массива в CMS.

Все-таки забыл. Это не фича CMS, а стандартный функционал PHP. В старых версиях php даже использовали func_get_args (и сейчас проверил, работает) для получения переменного кол-ва аргументов. Но всё равно, отчасти как СИшник так делать сейчас не советую, плохая практика. Лучше тогда использовать function main(...$array) при передаче переменного количества аргументов. Ко всему PHP идет по пути строгой типизации, вполне вероятно, что могут объявить подобное использование устаревшим.
*

dmitry_stas

  • Легенда
  • 12838
  • 1203 / 8
Лучше тогда использовать function main(...$array) при передаче переменного количества аргументов
вы правы, так и есть, я сейчас все свои плагины перевожу именно на такой способ, чтоб не зависеть от количества параметров. но только следует помнить, что это работает только в php5.6+
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

D. Tkachenko

  • Осваиваюсь на форуме
  • 26
  • 3 / 0
вы правы, так и есть, я сейчас все свои плагины перевожу именно на такой способ, чтоб не зависеть от количества параметров. но только следует помнить, что это работает только в php5.6+

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

В карточке товара JoomShopping не отображается Joomla модуль

Автор mrmagic

Ответов: 2
Просмотров: 82
Последний ответ 12.07.2019, 10:48:32
от mrmagic
Микроразметка Schema.org для товаров JoomShopping

Автор viteg

Ответов: 13
Просмотров: 3341
Последний ответ 11.07.2019, 18:30:37
от Савва
Другой шаблон для всех товаров

Автор Ragivort

Ответов: 2
Просмотров: 91
Последний ответ 26.06.2019, 13:28:06
от Ragivort
Решено: предустановленная сортировка товаров в JoomShopping

Автор urm

Ответов: 17
Просмотров: 1140
Последний ответ 20.06.2019, 15:08:28
от zahar_92
Дополнительное поле для списка товаров

Автор golinejj

Ответов: 13
Просмотров: 196
Последний ответ 12.06.2019, 07:51:07
от golinejj