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

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Так Вы же передаете данные из контроллера, не пойму, в чем вопрос...
*

shenya

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
вопрос получить массив из бд (стороння бд со своим логином и паролем), т.е. когда я получу массив из бд в модель и мне его нужно передать в вид.
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Блин, ну Вы вопросы то сразу формулируйте полностью...
Подключение к сторонноей базе данных

В представлении Вы же сами писали как получать $item = $this->get('Item');

*

shenya

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Извините что ввожу Вас в заблуждение. Был уверен что нужно подключаться родными средствами php. Вобщем то уже и подключался поэтому не стал спрашивать. Сейчас я пытаюсь сделать пример: вводим что-либо на форме в поле и это же самое нужно вывести в этой же форме (например просто текст) после нажатия кнопки. Введенная строка должна пройти через контроллер, где мы ее получаем, Затем пройти "как бы" обработку в модели (просто допишу что-нибудь в строку), затем отправиться в вид и отобразиться на форме. Когда я пойму каким образом провести эту строку через все скрипты, то думаю не составит труда в модели (послания запроса и получения данных) написать своих функций для обработки данных.
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
И верно сделали, что начали с простого. Потом будете наращивать. Будут вопросы, спрашивайте. Или уже есть? =)
*

shenya

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Вопрос все тот же вобщем-то)) С Вашей помощью получилось отправить строку из формы в контроллер, далее сделал как Вы предлагали: в контроллере получаем модель и вызываем функцию этой модели (например будет называться search). но данные в вид отправляются другой функцией (например getItem).
Проблема: функция (getItem) - вызывается из вида, должна отправлять то что получает ф-ция(search) - вызывается из контроллера. Я думаю можно сделать глобальную переменную в модели, в которую запишется "строка"  в ф-ции search, и getItem будет брать значение тоже из этой переменной. Но правильно ли это...
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Если у Вас представление получает данные с помощью getItem, значит модель должна возвращать данные из той же функции. Для этого просто в функции search установите свойство модели $item в полученное значение. Забудьте про глобальные переменные и изучайте ООП.

Код: php
public function search($data)
{
    $this->item = $data;
}

public function getItem()
{
    return $this->item;
}
*

shenya

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Вы имеете ввиду перед функциями дописать  protected $item;  ?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
*

shenya

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
что-то все никак.. Помоему с редиректом я что-то напутал.. функция search вызывается (если в ней вызвать несуществующую ф-цию то будет ошибка) Поправка: данные передаются в функцию и присваиваются переменной $i, но в getItem переменная $i имеет значение NULL. И еще заметил что из формы не передаются русские буквы (может дело в var_dump? он выводит пустую строку)
Код
class TestController extends JControllerLegacy
{
public function search ()
{
$data = JFactory::getApplication()->input->get('test_input');

$model = $this->getModel();
$model->search($data);

$uri = JFactory::getURI();
$this->setRedirect(JRoute::_($uri));
}
}
Модель теперь такая
Код
class TestModelTest extends JModelItem
{
private $i;

public function search($data)
{
$this->i = $data;
}

public function getItem()
{
return $this->i;
}

}
« Последнее редактирование: 03.04.2014, 12:47:49 от shenya »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Так у Вас же представление в контроллере вообще не вызывается.

Замените

Код: php
$uri = JFactory::getURI();
$this->setRedirect(JRoute::_($uri));
на
Код: php
parent::display();
*

shenya

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Код: php
parent::display();
Без изменений((
*

shenya

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
var_dump($_POST);     выводит русские буквы, а $data = JFactory::getApplication()->input->get('test_input'); не хочет...  только почему-то строка в POST имеет вид string(12) "рррррр", т.е. длина строки почему-то в 2 раза больше чем есть на самом деле
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Без изменений((
Покажите код класса представления. Не знаю, что не так с русскими буквами, но для проверки пока используйте латиницу. Потом будете с этим разбираться.
*

shenya

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
view.html.php
Код
class TestViewTest extends JViewLegacy
{
protected $item;

public function display($tpl = null)
{
// Получаем сообщение из модели.
$this->item = $this->get('Item');

// Отображаем представление.
parent::display($tpl);
}
}

Сам по себе вид получает данные если в getItem просто какую нибудь строку вернуть
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Хмм... Похоже, что представление вызывает другой объект модели, в котором не установлено свойство $i, а значит getItem() ничего не вернет. Надо подумать =)
*

shenya

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
может быть такое что значение в $i. не остается? или можно вызвать parent:: display в функции  search?
*

SmokerMan

  • Гуру
  • 5290
  • 720 / 26
var_dump($_POST);     выводит русские буквы, а $data = JFactory::getApplication()->input->get('test_input'); не хочет...  только почему-то строка в POST имеет вид string(12) "рррррр", т.е. длина строки почему-то в 2 раза больше чем есть на самом деле
а с чего оно будет выводить, если там по умолчанию стоит фильтр "CMD"?
Код
			case 'CMD':
$result = (string) preg_replace('/[^A-Z0-9_\.-]/i', '', $source);
$result = ltrim($result, '.');
break;
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Текс, я разобрался.

parent::display(); в контроллере автоматом создает другую модель, которая передается в представление. Поэтому в нашем случае parent::display(); использовать нельзя. Вместо этого:

Код: php
// Полуаем представление Test с типом HTML
$view = $this->getView('test', 'html');

// Устанавливаем модель в представление и делаем её дефолтной
$view->setModel($model, true);

// Отображаем
$view->display();
*

shenya

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Спасибо огроменное))) наконец-то работает! Проблему с передачей русских букв решил сделать так (т.к. несколько параметров для поиска)
Код
$args = array('test_input'   => FILTER_SANITIZE_STRING,
    'test_input2'   => FILTER_SANITIZE_STRING);
$data = filter_input_array(INPUT_POST, $args);
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
*

shenya

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Еще раз Здравствуйте! Изучал ваше руковдство урок7. Появился вопрос. Страничку админской формы я решил сделать как форму с полями и кнопкой Joomla "Сохранить". в базу данных по кнопке сохранить постоянно добавляются новые записи. В каком методе определяется что данные нужно редактировать а не создавать? В метод loadFormData я добавил следующее (как я понял мы по этому методу определяем старая это запись или новая. И как мне получить данные запроса из $query в пределах этого метода чтобы вернуть его значение)
Код
    protected function loadFormData()
    {
    //как не должно быть
$data['hostname'] = "localhost";
$data['port'] = "3306";
$data['dbname'] = "dbname";
$data['login'] = "login";
$data['password'] = "password";

 
        
       //как должно быть
        $db = JFactory::getDBO();
        $query = $db->getQuery(true);
 
        $query->select('hostname, port, dbname, login, password');
 

        $query->from('#__ecatalog');

       //в data записать результат запроса
       $data = $query;
 
       return $data;
    }

Мне нужно чтобы запись в таблице бд была одна, и редактировать ее в админской форме
« Последнее редактирование: 08.04.2014, 09:16:36 от shenya »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Цитировать
В каком методе определяется что данные нужно редактировать а не создавать?
Это определяется не в методе, а в форме - она должно содержать скрытое поле id:
Код: xml
<field name="id" type="hidden" />
Для новой записи значение не указывается, а для существующей - это id записи из базы. На основании этого класс таблицы оперделяет, добавлять или обновлять данные в базе.

Я добавил этот момент в часть 7, а то действительно не было очевидно.

Цитировать
И как мне получить данные запроса из $query в пределах этого метода чтобы вернуть его значение)
Код: php
$db->setQuery($query);
$results = $db->loadObjectList();

http://docs.joomla.org/Selecting_data_using_JDatabase
*

shenya

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Спасибо за ответ! запрос на получение данных выполнился. Но по прежнему вместо обновления данных выполняется запрос на добавление
В поле id добавил
<field name="id"  type="hidden"  default="1"/>
Правда теперь с ошибкой, т.к. дублируется значение первичного ключа..
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
*

shenya

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
да, если я правильно понял. Ну INSERT ведь правильно формируется, только он UPDATE должен быть (форма у меня одна, поэтому я хотел сделать получение значение не из первой формы как в примере, а из бд или просто прописать где нибудь, например <field name="id"  type="hidden"  default="1"/>)
код  admin/tables/ecatalog.php
Код
<?php
defined('_JEXEC') or die;
jimport('joomla.database.table');

class eCatalogTableeCatalog extends JTable
{
public function __construct(&$db)
{
parent::__construct('#__ecatalog', 'name', $db);
}
}

models/ecatalog.php
Код
<?php
defined('_JEXEC') or die;
jimport('joomla.application.component.modeladmin');

class eCatalogModeleCatalog extends JModelAdmin
{
public function getTable($type = 'eCatalog', $prefix = 'eCatalogTable', $config = array())
{
return JTable::getInstance($type, $prefix, $config);
}

    public function getForm($data = array(), $loadData = true)
    {
        $form = $this->loadForm(
$this->option . '.ecatalog', 'ecatalog', array('control' => 'jform', 'load_data' => $loadData)
);
        if (empty($form))
        { return false; }
 
        return $form;
    }

private function datab()
{
$db = JFactory::getDBO();
                $query = $db->getQuery(true);
 
                $query->select('hostname, port, dbname, login, password');
 
                $query->from('#__ecatalog');
 
$db->setQuery($query);
$result = $db->loadAssoc();

        return $result;
}

    protected function loadFormData()
    {
$data = $this->datab();
//$data['id'] = "1";
        return $data;
    }
}

Сама ошибка: Сохранить не удалось из-за ошибки: eCatalogTableeCatalog: :store failed
Duplicate entry '1' for key 'PRIMARY' SQL=INSERT INTO `jos_ecatalog` (`id`,`hostname`,`port`,`dbname`,`login`,`password`) VALUES ('1','hostt','3306','dbname','login','password')
Она появляется если в $form (метод getForm) есть поле id со значением "1".

Начал копать и обнаружил: когда выгрузил переменную из Вашего примера $data из loadFormData() получил
object(JObject)#141 (3) { ["_errors:protected"]=> array(0) { } ["id"]=> string(1) "1" ["greeting"]=> string(12) "Hello World!" }

В моем примере это просто массив из базы данных, а не объект
array(6) { ["id"]=> string(1) "1" ["hostname"]=> string(4) "host" ["port"]=> string(4) "3306" ["dbname"]=> string(6) "dbname" ["login"]=> string(5) "login" ["password"]=> string(8) "password" }

Вопрос (само собой) как получить объект?

Причем метод loadObject получает из бд stdClass, а не object(JObject)
« Последнее редактирование: 10.04.2014, 08:52:33 от shenya »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Цитировать
parent::__construct('#__ecatalog', 'name', $db);
Почему 'name' ? Здесь должно быть поле первичного ключа, а у Вас это 'id' !

Цитировать
$result = $db->loadAssoc();
Это получание массива. Для объекта - $db->loadObjectList();
*

shenya

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Цитировать
Почему 'name' ?
не знаю, откуда взялось, делал по примеру
Цитировать
Для объекта - $db->loadObjectList();
так поля пустые. метод loadObject() получает из бд object(stdClass), а не object(JObject). и все равно выполняется запрос на добавление(с ошибкой)
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Цитировать
class eCatalogTableeCatalog extends JTable
Почему Tablee? Должно быть Table

Цитировать
так поля пустые. метод loadObject() получает из бд object(stdClass), а не object(JObject)
Да сорри, Вы же одну запись выбираете. Тогда loadObject(). А JObject он или нет, это в принципе не важно.
*

shenya

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Цитировать
Почему Tablee? Должно быть Table
название компонента eCatalog.
Даже если так.  если прописать <field name="id"  type="hidden"  default="1"/>, то $data из loadFormData() выглядит так:
Код
object(stdClass)#41 (5) { ["hostname"]=> string(4) "host" ["port"]=> string(4) "3306" ["dbname"]=> string(6) "dbname" ["login"]=> string(5) "login" ["password"]=> string(8) "password" }
Если брать id из бд то так
Код
object(stdClass)#44 (6) { ["id"]=> string(1) "1" ["hostname"]=> string(4) "host" ["port"]=> string(4) "3306" ["dbname"]=> string(6) "dbname" ["login"]=> string(5) "login" ["password"]=> string(8) "password" }
В обоих случаях запрос на добавление с ошибкой

Поправка. запрос на добавление срабатывает в обоих случаях
« Последнее редактирование: 10.04.2014, 16:13:36 от shenya »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Jroute компонента альбомов

Автор Koot

Ответов: 2
Просмотров: 896
Последний ответ 03.08.2019, 10:21:04
от Aleks.Denezh
Как использовать функции компонента в модуле?

Автор specialist-web

Ответов: 6
Просмотров: 1178
Последний ответ 12.05.2019, 12:26:10
от AlekVolsk
params->get для компонента, как получить свои собственные параметры для компонента

Автор klubnichkaaa

Ответов: 13
Просмотров: 14196
Последний ответ 01.06.2017, 20:20:28
от Septdir
Форма обратной связи не отправляет почту (ajax_contact аддон SPPageBuilder)

Автор AHTEPO

Ответов: 3
Просмотров: 3109
Последний ответ 15.04.2017, 10:01:57
от Taatshi
Плагин Smart Search для своего компонента

Автор ftp27

Ответов: 1
Просмотров: 1997
Последний ответ 07.01.2017, 19:44:04
от newvideo