Новости 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 Гость просматривают эту тему.
  • 43 Ответов
  • 5385 Просмотров
*

x00xer

  • Захожу иногда
  • 51
  • 1 / 0
Всем привет.

Собственно пишу свой компонент и вот с чем столкнулся.
Работаю с базой через JTable
Переопределил свой метод чек
Код
  function check()
    {
        if(!$this->name)
        {
            $this->setError(JText::_('Имя не должно быть пустым'));
            return false;
        }
        return true;

    }

в модели делаю вот так
Код
...
$row = $this->getTable('cals');
...
// Проверяем, корректна ли запись
        if (!$row->check()) {
            $this->setError($row->_errors[0]); // ВОТ ИМЕННО ЭТО МЕСТО МНЕ КАЖЕТСЯ СОВЕРшЕННО НЕ ВЕРНЫМ
            return false;
        }

и уже в контроллере
Код
...
if ($model->save(&$data)) {
                $msg = JText::_( 'Все гуд' );
            } else {
                JError::raiseWarning( 0, 'Ошибка  - '.$model->getError() );
            }

В общем то вопрос в том, что смущает вот эта строчка
            $this->setError($row->_errors[0]);
Наверняка есть более нормальное решение.. потому как это я открыл для себя тупым дебагом объектов  ;D
т.е. JTable словил ошибку, а мне ее нужно донести до контроллера что б тот красиво отреагировал на нее..

*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Re: Пишу свой первый компонент под J1.5
« Ответ #1 : 10.04.2009, 15:58:48 »
Код
 if (!$row->check()) {
            $this->setError($row->getError()); // Стандартный метод JObject
            return false;
}
*

x00xer

  • Захожу иногда
  • 51
  • 1 / 0
Re: Пишу свой первый компонент под J1.5
« Ответ #2 : 10.04.2009, 20:52:16 »
Спасибо, я правда потом этот метод нашел но все равно спасибо за участие.

Расскажите мне пожалуйста.. я вот перечитал кучу док по англ,
сейчас правда нашел пару ссылок на русском
вдруг кому надо
http://kjoomla.com/lesson
и вот тут
http://www.webflasher.net/ru/webmasteru/components-urok-4.html

но все равно не догоняю одну вещь... я вообще имею опыт работы с MVC но немного при другом подходе. Я привык к тому что вид это то что в джулма шаблон который подключает вид, но с этим можно свыкнуться, порой это может даже оказаться удобно (теоретически)

А вот что я до конца не понимаю, так это метод  display  причем он вроде как в контроллере есть так и в виде... его нужно обязательно вызывать ?
Я бы конечно мог слегкостью полазив по исходникам Джумлы научиться как надо сделать, однако они сами делают всегда так что не понять как верно то  .. :-)
и еще вот этот  момент .. видел в некоторых компонентах что передают в урле параметр view  - зачем ?
Как я понимаю есть таск от него можно плясать как хош... наверно view приает какой то гибкости которой я не осознаю ??

Буду рад любым подсказкам.
Спасибо,
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Re: Пишу свой первый компонент под J1.5
« Ответ #3 : 10.04.2009, 20:58:17 »
Метод display контроллера передает управление view, вот и все.
А метод display y  view собственно является точкой входа.

Параметр view передается, потому что не нужно иметь по контроллеру на каждый view. В простых случаях контроллер вообще ничего не делает, а вся логика живет во view и model.
Стандартный контроллер просто вызывает view, который передан в запросе.
*

x00xer

  • Захожу иногда
  • 51
  • 1 / 0
Re: Пишу свой первый компонент под J1.5
« Ответ #4 : 14.04.2009, 10:58:10 »
Спасибо. понятно..
Вот это как раз и не привычно, обычно для всей логики используется контроллер.. ну все не как у людей ;D

В принципе мне ничего не мешает писать как привык и часть логики не относящейся к виду оставлять в контроллере, а уже логику которая требуется при формировании шаблона засовывать в вид, так может быть даже и удобнее -)

только вот все же переменная view в урле может как то все порушить, просто можно ввести какую нить фигню там и увидеть  белый экран с красной ошибкой что типа нет такого вида, как то это можно обыграть самому??
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Пишу свой первый компонент под J1.5
« Ответ #5 : 14.04.2009, 11:13:24 »
Я вот тут хочу тоже поинтересоваться - оправдано ли использование JTable? Стоит ли использвать этот класс для работы с базой?

По поводу контроллера - а как же метод $controller->execute? Он в принципе и является основной логикой, разве не так?
*

malus

  • Осваиваюсь на форуме
  • 49
  • 12 / 1
Re: Пишу свой первый компонент под J1.5
« Ответ #6 : 15.04.2009, 08:46:36 »
Я вот тут хочу тоже поинтересоваться - оправдано ли использование JTable? Стоит ли использвать этот класс для работы с базой?

Безусловно. Хорошо абстрагированный класс. Только есть одно БОЛЬШОЕ НО... Не стоит использовать CRUD-методы JTable. Или так: не стоит их использовать, предварительно внимательно не изучив исходники и хорошо не подумав.

По поводу контроллера - а как же метод $controller->execute? Он в принципе и является основной логикой, разве не так?
Он просто запускает метод контроллера.
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Пишу свой первый компонент под J1.5
« Ответ #7 : 15.04.2009, 10:25:23 »
Безусловно. Хорошо абстрагированный класс. Только есть одно БОЛЬШОЕ НО... Не стоит использовать CRUD-методы JTable. Или так: не стоит их использовать, предварительно внимательно не изучив исходники и хорошо не подумав.
Хмм, а тогда какой вообще в нём смысл? Ведь основное использование (как я понял) именно в CRUD?

Он просто запускает метод контроллера.
Не буду спорить :) Я только только "окунаюсь" в мир написания под Joomla! Вот-вот приступлю к написания простенького компонента и походу буду смотреть.
*

malus

  • Осваиваюсь на форуме
  • 49
  • 12 / 1
Re: Пишу свой первый компонент под J1.5
« Ответ #8 : 15.04.2009, 12:11:42 »
Хмм, а тогда какой вообще в нём смысл? Ведь основное использование (как я понял) именно в CRUD?

Основной его смысл в удобстве работы с моделями объектов, имеющих размещение в таблицах БД. Я с трудом себе представляю работу без его использования. Ну и по поводу CRUD я слегка передернул. Лично у меня большие претензии к методам publish, delete, checkout, move, reorder. Все остальное значительно облегчает жизнь.
Вышеозначенные методы легко реализуются в наследниках, что, сопсно, и делают разработчики встроенных расширений. Ведь нет же никаких оснований полагать, что они не знают о существовании встроенных методов :)

ЗЫ Кстати, publish, при неумелом использовании, организует уязвимость расширения в некоторых условиях. И я не видел чтобы об этом писали ни буржунете, ни в рунете.
« Последнее редактирование: 15.04.2009, 21:02:18 от malus »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Пишу свой первый компонент под J1.5
« Ответ #9 : 15.04.2009, 14:18:38 »
Понятненько. Ну мир ООП я тоже только начал постигать, поэтому ещё не могу осмыслить всех возможностей и приемуществ.
*

x00xer

  • Захожу иногда
  • 51
  • 1 / 0
Re: Пишу свой первый компонент под J1.5
« Ответ #10 : 20.04.2009, 21:46:51 »
Насколько я понял из исходников JTable это обертка над стандартным джумловским классом для работы с БД.

Я пока его использую при сохранении/обновлении записей, мне нравиться вроде как ОРМ прям :)

Вероятно этот способ совсем не супер производительный, но мне нравиться ;)

Стандартный контроллер просто вызывает view, который передан в запросе.

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

Как мне так такой способ для меня привычней...

А то получается контроллер как и бы нафик упал, а если подумать сколько всего происходит иницалзация, создание объектов и т.д.. и всго для того что бы вызвать вид, в котором начнутся всякие пертурбации? нее  :P
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Пишу свой первый компонент под J1.5
« Ответ #11 : 23.04.2009, 21:24:06 »
У меня вообще фигня с валидацией. Переопределил check() но он тупо не хочет работать :( Уже всё перепроверил несколько раз, но хоть убей не получается. Может кто подскажет? Вот мои действия по тестированию check():

Переопределение в JTable:

   function check()
	
{
	
	
if((!
$this->nick) || (trim($this->nick) == ''))
	
	
{
	
	
	
$this->setError(JText::_('Nick should be specified'));
	
	
	
return 
false;
	
	
}
	
	
return 
true;
	
}


Метод сохранения записи в модели:

   public function save($test)
	
{
	
	
$table = &$this->getTable('Test');
	
	

	
	
if (!
$table->bind($test))
	
	
{
	
	
	
$this->setError($table->getError());
	
	
}

	
	
if (
$table->check())
	
	
{
	
	
	
if (!
$table->store(true))
	
	
	
{
	
	
	
	
$this->setError($table->getError());
	
	
	
}
	
	
}
	
	
else
	
	
{
	
	
	
$this->setError($table->getError());
	
	
}
	
	
return 
true;
	
}


Ну в контроллере соответственно:

   function save()
	
{
	
	
$data JRequest::get('post');
	
	
$model $this->getModel('Test');
	
	
if (
$model->save($data))
	
	
{
	
	
	
$message JText::_('Test saved');
	
	
}
	
	
else
	
	
{
	
	
	
$message JText::_('Test save failed');
	
	
	
$message .= '['.$model->getError().']';
	
	
	

	
	
}
	
	
$this->setRedirect('index.php?option=com_test'$message);
	
}


Я даже пытался в check() сразу добавить false, но всё равно при сохранении пустой записи я получаю сообщение Test saved.
*

x00xer

  • Захожу иногда
  • 51
  • 1 / 0
Re: Пишу свой первый компонент под J1.5
« Ответ #12 : 24.04.2009, 12:08:37 »
Вот как это делаю я

в контроллере есть функция
Код: php
...
$model = & $this->getModel('cals');

 if ($model->addCal(&$data)) {
                $msg = JText::_( 'saved success' );
            } else {
                JError::raiseWarning( 0, 'Errors saved ххххх - '.$model->getError() );
            }
       // }
       
        $this->setRedirect($link, $msg);
    }

в модели есть метод
Код: php
function addCal($data)
    {
        $row = $this->getTable('cals');
       
       
       
       
        if (!$row->bind($data)) {
            $this->setError($row->getError());
            return false;
        }
         
     
        if (!$row->check()) {
       
   
            $this->setError($row->getError());
            return false;
        }

     
        if (!$row->store()) {
            $this->setError($row->getError());
            return false;
        }

        return true;
 
    }

ну и в классе таблицы переопределил метод чек

Код: php
function check()
    {
        if(empty($this->name))
        {
            $this->setError(JText::_('Name can not be empty'));
            return false;
        }
        return true;

    }
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Пишу свой первый компонент под J1.5
« Ответ #13 : 25.04.2009, 10:58:13 »
Сделал, всё равно получаю Test saved :( У меня такое ощущение, что check() вообще не вызывается.
*

x00xer

  • Захожу иногда
  • 51
  • 1 / 0
Re: Пишу свой первый компонент под J1.5
« Ответ #14 : 25.04.2009, 12:20:28 »
Попробуй в своем переопределенном методе чек первой строчкой сделать
var_dump($this); die();
и покажи чего там у тебя
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Пишу свой первый компонент под J1.5
« Ответ #15 : 25.04.2009, 12:25:55 »
Сделал, всё равно получаю Test saved :( У меня такое ощущение, что check() вообще не вызывается.
*

x00xer

  • Захожу иногда
  • 51
  • 1 / 0
Re: Пишу свой первый компонент под J1.5
« Ответ #16 : 26.04.2009, 12:14:12 »
ну значит ты в эту ф-цию не попадаешь совсем ... значит где от какая то очепятка
*

x00xer

  • Захожу иногда
  • 51
  • 1 / 0
Re: Пишу свой первый компонент под J1.5
« Ответ #17 : 26.04.2009, 12:17:39 »
а ну так смотри у тебя ж нету ретурнов
там где ты ожидаешь ошибок у тебя нету возвратв

вот смотри как у тебя

   

if ($table->check())
{
if (!$table->store(true))
{
$this->setError($table->getError());
}
}

а надо

if ($table->check())
{
if (!$table->store(true))
{
$this->setError($table->getError());
return false;
}
}
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Пишу свой первый компонент под J1.5
« Ответ #18 : 26.04.2009, 12:22:51 »
x00xer ты был прав!  Очепятка сокрылась в файлике /tables/test.php - я класс закрыл до метода check()  и получалось, что check() не вызывался как метод класса.

Держи +1 за помощь ;)

P.S.
Ну и ретёрны тоже надо было поставить.
*

CBETO4

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Re: Пишу свой первый компонент под J1.5
« Ответ #19 : 01.05.2009, 00:50:16 »
вот такой вопрос, делаю компонент, выводящий в цикле инфу из БД + сортировка. Не могу понять куда в какие файлы компонента разложить модуль. Что кладем в контроллер, что в view.html и что в дефолт шаблон... Подскажите плиз.
*

x00xer

  • Захожу иногда
  • 51
  • 1 / 0
Re: Пишу свой первый компонент под J1.5
« Ответ #20 : 01.05.2009, 09:07:44 »
вот такой вопрос, делаю компонент, выводящий в цикле инфу из БД + сортировка. Не могу понять куда в какие файлы компонента разложить модуль. Что кладем в контроллер, что в view.html и что в дефолт шаблон... Подскажите плиз.
Что значит в файлы компонента разложить модуль ?
тут где то в соседней теме я давал ссылки на русскую документацию по этому делу, поищи, это должно помочь
*

x00xer

  • Захожу иногда
  • 51
  • 1 / 0
Re: Пишу свой первый компонент под J1.5
« Ответ #22 : 04.05.2009, 16:02:28 »
 !!!???!!!
Народ подскажите можно ли как то из админской части достучаться до модели которая на фронте используется ?
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Re: Пишу свой первый компонент под J1.5
« Ответ #23 : 04.05.2009, 16:04:25 »
!!!???!!!
Народ подскажите можно ли как то из админской части достучаться до модели которая на фронте используется ?

Ну сделать ее файлу require
*

x00xer

  • Захожу иногда
  • 51
  • 1 / 0
Re: Пишу свой первый компонент под J1.5
« Ответ #24 : 04.05.2009, 22:57:05 »
Отличный способ :-)

я имел ввиду есть способ который зашит во фреймворк.
типа
$this->getModel но так что б этот метод мог подключать модель для фронта или наоборот.

Просто при вашем способе надо будет после подключения файла создавать  объект..
оно то конечно ничего страшного, но нахрена тогда они писали такой фреймворк ?
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Re: Пишу свой первый компонент под J1.5
« Ответ #25 : 04.05.2009, 23:15:54 »
фреймворк совершенно не обязан покрывать 100% нужд всех возможных его пользователей.
Нет никакой сложности сделать require, так нафига городить огород?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Пишу свой первый компонент под J1.5
« Ответ #26 : 04.05.2009, 23:18:27 »
Да есть способ! Переопредлить путь можно в конструкторе контроллера. Попробуй так:

Код: php
function __construct()
{
$path = JPATH_COMPONENT.DS.'models';
$this->addModelPath($path);
parent::__construct();
}
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Re: Пишу свой первый компонент под J1.5
« Ответ #27 : 04.05.2009, 23:21:17 »
Хехе :) я еще сложнее могу написать, только зачем?
*

shprota

  • Давно я тут
  • 770
  • 53 / 1
  • Тружусь, не покладая рук
Re: Пишу свой первый компонент под J1.5
« Ответ #28 : 04.05.2009, 23:23:27 »
А главное, что во фреймворке есть архитектурный глюк: JController::getModel всегда возвращает новый объект, а не кеширует старый. И во view этот объект не передается.
Вот это реальный бред, а модель создать - фигня :)
*

x00xer

  • Захожу иногда
  • 51
  • 1 / 0
Re: Пишу свой первый компонент под J1.5
« Ответ #29 : 04.05.2009, 23:47:35 »
да круто :-) что тут сказать .. веселый фреймворк...
конечно на 100 процентов и не должен это верно, но просто как то сильно уж топорно сделан мезнизм наверно из-за это обратной совместимости они так все искорячили... но зато клиентуру не потеряли ... а мы мучаемся -)


 я вот тут сейчас еще с одним моментом пытаюсь воевать

Вот кстати еще момент не знаю известен он или нет..

Мне понадобилось в цикле  делать вставку небольшого количества строк в таблицу
я решил использовать JTable
и в цикле каждый раз присваивал новые значения объекту (через bind() ) однако он упорно сохранял только первую запись а после только эту же запись обновляет
нашел метод reset() который из доки по идее возвращал все значения к дефолтным... однако это не помогло, посмотрев в код я увидил
Код: php
$k = $this->_tbl_key;
foreach ($this->getProperties() as $name => $value)
{
if($name != $k)
{
$this->$name = $value;
}
}
т.е. значение первичного ключа он к дефолту не возвращает ..

интересно и как правильно пользоваться
bind()
check()
store()
в цикле ?




Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как пользователь может удалить свой аккаунт?

Автор selimoff

Ответов: 6
Просмотров: 3715
Последний ответ 22.11.2017, 22:42:32
от Ecos
Надо переделать готовый компонент Генератор Купонов J2.5 на J1.5

Автор mkoff

Ответов: 3
Просмотров: 2192
Последний ответ 18.12.2014, 10:22:04
от assa1988
Компонент вывода информации из внешней базы данных

Автор rambeer

Ответов: 33
Просмотров: 11421
Последний ответ 12.09.2014, 05:01:34
от Mad_Doc
Модифицировать компонент

Автор karabert

Ответов: 0
Просмотров: 1524
Последний ответ 28.11.2011, 22:39:04
от karabert
Новый компонент. Реализация поиска/фильтрации таблицы в админке.

Автор passat

Ответов: 6
Просмотров: 3777
Последний ответ 26.03.2011, 12:21:45
от yunoshev