Новости Joomla

Вышел компонент интернет-магазина HikaShop 6.1.0.Один из известных компонентов магазина для Joomla

Вышел компонент интернет-магазина HikaShop 6.1.0.Один из известных компонентов магазина для Joomla

👩‍💻 Вышел компонент интернет-магазина HikaShop 6.1.0.Один из известных компонентов магазина для Joomla.v.6.1.0 Что нового?Модуль корзины. Отображение корзины в виде offcanvas-элемента.Кнопка выхода в панели управления пользователя. Что тут сказать, просто добавили. Отправка писем только для заказов, оплаченных определёнными способами. Это удобно для рассылки сообщений, привязанных к региону или провайдеру (например, инструкции по банковскому переводу только для заказов, оплаченных банковским переводом).Листинг выплат по партнерской системе. В разделе управления партнёрскими программами появилось новое подменю «Выплаты», в котором перечислены выплаты партнёрам (упрощённое отслеживание и сверка). Добавлены настройки, благодаря которым можно определить категории товаров, на которые начисляется партнёрская комиссия с продаж.Список комплектов товаров. Система комплектов позволяет отслеживать остатки товаров, продаваемых в комплекте.Подробнее в блоге Hikashop.Поскольку мы не сообщали ранее о Hikashop 6.0, то вкратце скажем, что он вышел в июне 2025г. В новой версии было:- 13 исправлений ошибок- 17 улучшений. В частности:- - Hikashop теперь проверяет UserAgent пользователя перед добавлением товара в корзину, чтобы отсечь ботов. Ведь компонент хранит корзины в базе данных.- - улучшен роутинг компонента, позволяющий использовать в названии товара даже слеши.- - улучшения фильтра товаров - ускорение загрузки категорий/брендов/характеристик.- 4 новых функции:- - добавлена поддержка Joomla 6.0.- - Улучшена возможность адаптации форм HikaShop на фронтенде к шаблонам, не использующим стандартные классы Joomla.- - Плагин внутреннего баланса: возможность исключить уцененные товары из начисленных баллов.- - Теперь можно выбирать склады для вариантов товаров.Подробнее в Changelog Hikashop.Также при работе с Hikashop стоит учитывать, что один и тот же код поддерживает версии Joomla от 3.х до 5.х, а в таблице сравнения версий заявлена и Joomla 2.5. Беглый просмотр кода показал, что компонент как был, так и остался старым и для совместимости с Joomla 4+ просто добавлен плагин.@joomlafeed#joomla #расширения #hikashop

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

doxtor

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Контроллер
« : 18.03.2009, 23:25:48 »
Здрасте. Подскажите линки, где можно почитать про контроллеры. Я не понимаю когда нужно писать там код, и какой код.
Я вычитал у в книге Mastering Joomla! 1.5 Extension and Framework Development by James Kennard как он это делает, но его код глючит у меня. Да и объяснения там мягко говоря поверхностные, хотя все остальные книги по данной теме вообще в сравнение не беруться, одна вода. Эта книга must have.
Спасибо
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Re: Контроллер
« Ответ #1 : 18.03.2009, 23:42:17 »
Контроллер отвечает за обработку запроса. То есть, это место, где пишется вся бизнес-логика приложения.
Соответственно, модель отвечает за своевременную поставку данных, а View - за отображение.
Вся идеология описана многократно - поиском MVC (Model, View, Controller).
*

doxtor

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: Контроллер
« Ответ #2 : 19.03.2009, 00:09:15 »
Да, я знаю идею MVC, прошел tutorial. Просто плохо чувствую контроллеры. Они вызываются только в точке входа и при редиректах?
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Re: Контроллер
« Ответ #3 : 19.03.2009, 00:10:13 »
Собственно, контроллер и есть точка входа.
*

doxtor

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: Контроллер
« Ответ #4 : 19.03.2009, 00:34:20 »
Точка входа вызывает сперва контроллер, а потом, когда я перешел на какой-то view я ведь попасть в код контроллера могу только через редирект(линк), точка входа как-бы одноразовая, или не?
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Re: Контроллер
« Ответ #5 : 19.03.2009, 00:35:36 »
типа того
*

doxtor

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: Контроллер
« Ответ #6 : 19.03.2009, 21:37:49 »
Помогите. Делаю свой компонент в back-end части. Запускаю сайт. Через базовый контроллер WatsexController запустилась стандартная view часть со стандартным layout(tmpl) = default.php. На этом default.php есть кнопочка, к которой я приковал link = index.php?option=com_watsex&controller=categories. В папочке /controllers есть categories.php - контроллер WatsexControllerCategories, которого я хочу вызвать. Если его код будет таким:
Код
...
class WatsexControllerCategories extends WatsexController
{
function display()
{
parent::display();
}
}
...
То нифига не происходит. если его код будет другим:
Код
...
class WatsexControllerCategories extends WatsexController
{
function display()
{
$viewName = JRequest::getVar('view', 'categories');
$viewType = 'html';
$view = &$this->getView($viewName, $viewType);
echo "I'm here";
[b]dump($viewName.' | '.$viewtype.' | '.$view->getLayout());[/b]
$view->display();

parent::display();
}
}
...
то страница остается той же, только вызывается пишется I'm here (то есть я вижу, что код контроллера выполняется). также браузер пишет, что Notice: Undefined variable: viewtype in C:\Program Files\xampp\htdocs\GridSupport\administrator\components\com_watsex\controllers\categories.php on line 26, то есть $viewtype, не смотря на то, что я его грубо задал 3 строками ранее неопознан.

То есть контроллер не выполняет свою простую задачу по показу страницы! Пожалуйста, помогите, чем можете.

Я добавил атачмент, компонент инсталлируется. Нужно нажать кнопку Category Manager (там их 4 на самом деле)

[вложение удалено Администратором]
« Последнее редактирование: 19.03.2009, 21:45:40 от doxtor »
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Re: Контроллер
« Ответ #7 : 20.03.2009, 08:21:05 »
Эту же книженцию читаю. И тоже вопросы.
Попробуй View прямо из контроллера вызвать вроде этого
Код
function display()
{
$view = $this->getView('Categories', 'html','watsexView');
$model = $this->getModel('Categories');
$categories = $model->getCategories();
$view->assignRef('categories', $categories);
$view->display();
parent::display();
}
А в View за комментировать.
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Контроллер
« Ответ #8 : 20.03.2009, 09:33:39 »
то есть $viewtype, не смотря на то, что я его грубо задал 3 строками ранее неопознан.
у вас разный регистр, объявляли переменную, и присваивали значение вы $viewType, а в var_dump используете $viewtype.
*

doxtor

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: Контроллер
« Ответ #9 : 23.03.2009, 01:15:20 »
Спасибо ребята, разобрался. Имею такой вопрос (он простой, это я еще php туго знаю), имею код:
Код
<?php
defined('_JEXEC') or die();

jimport( 'joomla.application.component.view' );

class WatsexViewCategory extends JView
{
function display($tpl = null)
{
// беру с базы
$category =& $this->get('Category');

// если в базе пусто, подготавливаю пустой шаблон
if ($category == null)
$this->prepareNewForm();

$this->assignRef('category', $category);

parent::display($tpl);
}

function prepareNewForm()
{
$category->catid = 0;
$category->name = '';
$category->description = '';
$category->image = '';
}

Проблема с вызовом функции prepareNewForm() - она игнорируется и выводится Fatal error (если же её код вставить на место вызова, то все работает, я просто хочу отдельный код с точки зрения разделения кода на логические части, ну вы сами уже поняли), я видимо неверно это делаю, подскажите как, пожалуйста.
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Контроллер
« Ответ #10 : 23.03.2009, 01:18:19 »
Проблема с вызовом функции prepareNewForm() - она игнорируется и выводится Fatal error
ну это вполне нормально, у вас же внутри этой функции используется необъявленная переменная $category...

Вам нужно модифицировать эту функцию, примерно вот так:

Код: php
	function prepareNewForm()
{
$category = new StdClass;
$category->catid = 0;
$category->name = '';
$category->description = '';
$category->image = '';
return $category;
}

после чего вызывать ее вот так:

Код: php
if ($category == null) {
$category = $this->prepareNewForm();
}
*

doxtor

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: Контроллер
« Ответ #11 : 23.03.2009, 01:42:24 »
Действительно), спасибо. Я чето решил что єта переменная глобальная, телепень)
*

doxtor

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: Контроллер
« Ответ #12 : 23.03.2009, 12:49:25 »
Здрасте, это опять я.
Вроде бы naming convention соблюдается, а код падает, опишу:

Код модели:
Код
class WatsexModelCategories extends JModel
{
var $_categories;

var $_selectQuery = 'SELECT * FROM #__watsex_category';

function getCategories()
{
        if (empty($this->_categories))
        {
        $query = $this->_selectQuery;
                $this->_categories = $this->_getList($query);
        }       
       
        return $this->_categories;
}
}
Код отображения:
Код
class WatsexViewCategories extends JView
{
function display($tpl = null)
{
// кнопки
JToolBarHelper::title(JText::_('Category Manager'), 'generic.png');
JToolBarHelper::addNewX();
JToolBarHelper::editListX();
JToolBarHelper::deleteList('Are you sure for removing category(s)? All tickets in it also will run away!');

// ______(1)_______
// обращаюсь к методу прямо, подразумевая, что WatsexViewCategories и WatsexModelCategories
// связаны автоматически благодаря своим именам
$categories = & $this->get('Categories');

// ______(2)_______
// альтернатива - вызываю модель, а потом ее метод
//$model = & $this->getModel('Categories');
//$categories = $model->getCategories();

$this->assignRef('categories', $categories);

parent::display($tpl);
}
}

Глюк в коде отображения.
Если я использую _(1)_ способ по взятию данных, то view загружается - все хорошо,
а вот данные почему-то не загружает с базы (они там есть, смотрел через phpmyadmin).
Если поместить dump('3'); в код ViewCategories, то окошко появляется с тройкой.
Если поместить dump('3'); в код ModelCategories в метод getCategories(), то окошко не появляется. То есть просто туда не доходит компилятор.

Если я использую _(2)_ способ, то выдается Fatal error: Call to a member function getCategories() on a non-object in...
на линии $categories = $model->getCategories(); То есть падает при обращении к методу.

Кто понял и знает причину проблемы, сообщите пожалуйста.

[вложение удалено Администратором]
« Последнее редактирование: 23.03.2009, 16:34:29 от doxtor »
*

doxtor

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: Контроллер
« Ответ #13 : 23.03.2009, 16:34:05 »
Может это потому, что код контроллера подозрительный?

Код
class WatsexControllerCategories extends WatsexController
{
function display()
{
$document =& JFactory::getDocument();
$viewName = JRequest::getVar('view', 'categories');
$viewType = $document->getType();
$view = &$this->getView($viewName, $viewType);
$view->display();
//parent::display();
}
}
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Re: Контроллер
« Ответ #14 : 23.03.2009, 16:59:43 »
Я чет не совсем понимаю, что делать собираешся. В дисплей контроллера вообще можно ничего не писать. Метод дисплей пердставелния сам выполнится. А в нем всего две строки
$categories = $this->get('categories');
$this->assignRef('categories', $categories);
и все - лови $categories в шаблоне. Если нету, то по каким-то причинам модель не находится. Смотри имена файлов и классов
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

doxtor

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: Контроллер
« Ответ #15 : 23.03.2009, 17:17:21 »
Цитировать
Я чет не совсем понимаю, что делать собираешся. В дисплей контроллера вообще можно ничего не писать. Метод дисплей пердставелния сам выполнится.
Да, я тоже так думал, но возникли трудности, которые я выше описал. Благодаря этому добавочному коду в контоллере у меня изображается view, иначе нифига.
Цитировать
А в нем всего две строки
$categories = $this->get('categories');
$this->assignRef('categories', $categories);
и все - лови $categories в шаблоне.
Эти строки логично во view писать, так как view связывает данные с формой. Также чтоб они работали нужно jimport('joomla.application.component.view'); в коде контроллера прописывать, так как assignRef - метод класса JView, а это путаницу вносит.

Я 2 постами выше прикреплял атачмент. Кому интересно, может посмотреть. При инсталляции компонента в БД в таблицу jos_watsex_category записывается одна строка "Default category". Вам достаточно поставить компонент и кликнуть кнопочку  Category Manager. Спасибо за отзыв. Я конечно пробую что-то менять, но пока не получается. Мне любые подсказки помогают.
« Последнее редактирование: 23.03.2009, 17:22:05 от doxtor »
*

doxtor

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: Контроллер
« Ответ #16 : 23.03.2009, 19:54:40 »
Хехе, я разобрался)

Закомментил метод _(1)_, задействовал _(2)_, а в контроллер, где извращенный код, добавил две строчки:

$model =& $this->getModel('Categories');
$view->setModel($model);

перед

$view->display();

то есть мой код контроллера стал еще более извращенным))
Очень помогло dump-ить объекты и дебагом ходить в Eclipse. Я допер, что новосозданному view в контроллере надо было назначить модель, так как не было у него ее. Вот и пришлось насильно пихать инициализацию как view, так и model. Единственное чего не понял, почему мой конструктор не может работать как здоровые конструкторы, то есть просто parent::display(); и все, как Lex говорил. Думаю меня может понять только опытный, жаль такие не откликаются. Что ж, пока продолжу извращать код) Всем удачи. Разрази меня гром, а я по прежнему не понимаю эти конструкторы)
*

doxtor

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: Контроллер
« Ответ #17 : 23.03.2009, 20:31:30 »
Да, никто не знает в чем разница между объявлениями в классе (скажем в модели):
function &getCategory()
и
function getCategory()
То есть когда нужно ставить знак амперсанта, на мой код пока это не влияло, но на будущее лучше знать.

Спасибо, Док
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Контроллер
« Ответ #18 : 23.03.2009, 20:35:50 »
То есть когда нужно ставить знак амперсанта, на мой код пока это не влияло, но на будущее лучше знать
на такие вопросы ответ можно найти в любой книжке по PHP... данный символ определяет будет ли результат функции возвращаться по ссылке или по значению...
*

doxtor

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: Контроллер
« Ответ #19 : 23.03.2009, 21:47:09 »
Оу, конечно, адрес переменной и значение.. я не читаю книги по php)
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Контроллер
« Ответ #20 : 23.03.2009, 21:52:16 »
я не читаю книги по php)
я тоже, никогда не читал... но даже в стандартной документации по PHP этот момент описан :)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться