Новости Joomla

👩‍💻 События плагинов и порядок их срабатывания при работе с пользовательскими полями Joomla и использовании FieldsHelper.

👩‍💻 События плагинов и порядок их срабатывания при работе с пользовательскими полями Joomla и использовании FieldsHelper.

В процессе работы с Joomla бывает необходимо работать с пользовательским интерфейсом более тонко, чем обычно. Все формы Joomla состоят из стандартных полей, содержанием, стилем отображения, состоянием (включено/выключено, доступно для редактирования или нет и т.д.) можно управлять с помощью плагинов. Да и для нестандартных проектов хорошей практикой является создание одного системного или нескольких плагинов групп "под проект", в которых храниться весь "нестандарт".

В этой статье описаны все триггеры, которые вызываются через Event Dispatcher из administrator/components/com_fields/src/Helper/FieldsHelper.php, с привязкой к жизненному циклу (порядку этапов работы запроса), аргументам, изменяемым данным и дальнейшему распространению по Joomla. Это поможет вам работать с Joomla свободнее и не опасаясь при этом потерять изменения при очередном обновлении движка.

Подходы, описанные в статье, полезны в тех случаях, когда вы работаете с данными в com_fields - механизме создания и редактирования пользовательских полей ядра Joomla и при использовании FieldsHelper. Многие сторонние компоненты не используют эту возможность, поэтому данная статья будет полезна лишь частично.

Читать статью на Хабре.

@joomlafeed

🏆 Открыто голосование за Joomla в премии CMS Critic People’s Choice Awards 2025

🏆 Открыто голосование за Joomla в  премии CMS Critic People’s Choice Awards 2025

🗓 Голосование продлится до 27 февраля 2026 года.

👩‍💻 Проголосовать! 👩‍💻

Номинации, в которых можно проголосовать за Joomla:
⭐️ Best Free CMS
⭐️ Best Open Source CMS
⭐️ Best Enterprise CMS

Также в номинации Best e-Commerce Solution участвуют компоненты интернет-магазинов для Joomla:
⭐️ HikaShop
⭐️ Virtuemart

В номинации Best Website Builder оказались:
⭐️ YooTheme
⭐️ SP Page Builder

Что такое CMS Critic Awards?
С 2012 года премия CMS Critic Awards занимает особое место в сообществе систем управления контентом (CMS). Это единственный в своем роде сайт, который составляет рейтинг системы управления контентом и связанных с ними решений на рынке — от малого до крупного и подчеркивает их инновации и услуги.

Каждый год награда CMS Critic Awards присуждается одному победителю в различных отраслевых категориях, таких как: «Лучшая облачная CMS», «Лучший DXP», «Лучшая Headless CMS и других. Затем результаты оглашаются через СМИ вместе с выбором редакции CMS Critic.
В этом году премия вернулась к своим традициям и только TOP-5 движков по количеству номинаций попали в 2-й этап - голосование.

@joomlafeed

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

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
возник как вывести переменную в панели администратора
в файле
/administrator/components/com_virtuemart/views/orders/tmpl/orders.php
пытаюсь вывести переменную с базы MySQL
называется в MySQL "dataj"
вывожу таким образом
Код
<?php
                    echo $order->dataj;

 ?>
и она не выводится а вот в карточке товара в
/templates/a4joomla-mininova-free/html/com_virtuemart/cart/order_done.php
таким способом
Код
<?php

           
                      echo $order->['details']['BT']->dataj;
 ?>
выводится нормально

помогите пожалуйста вывести данную переменную
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
В какой таблице поле dataj?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
поле с dataj находится в таблице _virtuemart_userinfos

« Последнее редактирование: 03.03.2014, 10:22:57 от Stasweb »
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
причем с таблицы
_virtuemart_orders
выводит нормально
Код
<?php echo $order->order_email; ?>
в чем может быть проблема
« Последнее редактирование: 03.03.2014, 10:44:48 от Stasweb »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Это не проблема: выбор выводимых полей определяется в VirtueMartModelOrders->getOrdersList(). Там не знали о вашем новом поле.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
а по точнее можно
как мне это все реализовать
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
Это не проблема: выбор выводимых полей определяется в VirtueMartModelOrders->getOrdersList(). Там не знали о вашем новом поле.
опишите по подробнее как мне ее вывести
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
я в administrator/components/com_virtuemart/models/orders.php
Код
class VirtueMartModelOrders extends VmModel {

/**
* constructs a VmModel
* setMainTable defines the maintable of the model
* @author Max Milbers
*/
function __construct() {
parent::__construct();
$this->setMainTable('orders');
$this->addvalidOrderingFieldName(array('dataj','order_name','order_email','payment_method','virtuemart_order_id' ) );

}
и в /administrator/components/com_virtuemart/views/orders/tmpl/orders.php
вывожу так
Код
 echo $order->dataj; 
и нечего не выводится
*

artserge

  • Захожу иногда
  • 118
  • 11 / 0
не выводится потому что движок ищет ваше поле в таблице orders
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
так оно там же есть и он выводит его в другом месте нормально
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
Если кто реализовывал
разжуйте как и где и что править
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Зачем вы полезли в __construct(), я же вам говорил, что нужно править функцию getOrdersList().
Измените
Код: php-brief
$select = " o.*, CONCAT_WS(' ',u.first_name,u.middle_name,u.last_name) AS order_name "
.',u.email as order_email,pm.payment_name AS payment_method ';
на
Код: php-brief
$select = " o.*, CONCAT_WS(' ',u.first_name,u.middle_name,u.last_name) AS order_name "
.', u.dataj, u.email as order_email,pm.payment_name AS payment_method ';

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

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
В файле
 administrator/components/com_virtuemart/models/orders.php
в строке  234 - 235 вставляю код
Код
$select = " o.*, CONCAT_WS(' ',u.first_name,u.middle_name,u.last_name) AS order_name "
.', u.dataj, u.email as order_email,pm.payment_name AS payment_method ';
и в файле
 /administrator/components/com_virtuemart/views/orders/tmpl/orders.php   
Код
echo $this->dataj; 
и не работает
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Код
echo $this->dataj; 
и не работает
Конечно, не работает. В начале вы же правильно пытались выводить
Код
<?php
                    echo $order->dataj;

 ?>
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
Извиняюсь сам косиканул все работает нормально спасибо
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
возник еще один вопрос с выводом другой переменной с таблицы
_users
надо вывести
name и username
пытался вывести так
Код
 
echo $order->name;
echo $order->username;
подскажите как в файле
/administrator/components/com_virtuemart/views/orders/tmpl/orders.php
выводятся переменные с разных таблиц
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
Если выводить так как было описано ниже
в /administrator/components/com_virtuemart/views/orders/tmpl/orders.php написать u.username, u.name,
Код
 $select = " o.*, CONCAT_WS(' ',u.first_name,u.middle_name,u.last_name) AS order_name "
.',u.username, u.name, u.dataj, u.email as order_email,pm.payment_name AS payment_method ';
а в administrator/components/com_virtuemart/models/orders.php
Код
<?php
echo $order->name;
echo $order->username;
?>
то в панели администратора пишет
Код
vmError: exeSortSearchListQuery Unknown column 'u.username' in 'field list' SQL=SELECT SQL_CALC_FOUND_ROWS o.*, CONCAT_WS(' ',u.first_name,u.middle_name,u.last_name) AS order_name ,u.username, u.name, u.dataj, u.email as order_email,pm.payment_name AS payment_method FROM calcbook_virtuemart_orders as o LEFT JOIN calcbook_virtuemart_order_userinfos as u ON u.virtuemart_order_id = o.virtuemart_order_id AND u.address_type="BT" LEFT JOIN calcbook_virtuemart_paymentmethods_ru_ru as pm ON o.virtuemart_paymentmethod_id = pm.virtuemart_paymentmethod_id WHERE ( o.virtuemart_vendor_id = "1" ) ORDER BY order_name DESC LIMIT 0, 20

переменные  
Код
<?php echo $row->username; ?>
<?php echo $row->name; ?>
я взял с файла /administrator/components/com_virtuemart/views/user/tmpl/default.php
но при подключении их
как
Код
<?php
echo $order->name;
echo $order->username;
?>
и как

Код
<?php 
echo $row->username;
echo $row->name;
?>
берет эти поля как я понял он с таблицы _users
причем текстовые
Код
<?php
echo $this->sort('ju.name', 'COM_VIRTUEMART_USER_DISPLAYED_NAME');
echo $this->sort('ju.username', 'COM_VIRTUEMART_USERNAME');
 ?>
срабатывают
а сами имя и логин не срабатывают подскажите как решить эту проблему
« Последнее редактирование: 04.03.2014, 15:16:36 от Stasweb »
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
Если ставлю
Код
u.virtuemart_user_id
в
Код
 $select = " o.*, CONCAT_WS(' ',u.first_name,u.middle_name,u.last_name) AS order_name "
.', u.virtuemart_user_id, u.dataj, u.email as order_email,pm.payment_name AS payment_method ';

и выводом
Код
<?php
echo $order->virtuemart_user_id;
?>
выводит нормально id пользователя
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Код: php
echo JFactory::getUser($order->virtuemart_user_id)->username;
интернет-блог: http://websiteprog.ru
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
Спасибо помогло
Код
<?php echo JFactory::getUser($order->virtuemart_user_id)->username;?> &nbsp;-&nbsp;
<?php echo JFactory::getUser($order->virtuemart_user_id)->name;?>
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
Еще вопрос я вывожу вот от суда

переменную
Код
<?php
echo $order->ofis_ispolnitel;
?>
но у меня выводит значение а не заголовок
Вопрос как мне это вывести
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
Вот допустим такая переменная
Код
<?php echo $order->payment_method; ?>
но она в процессе заказа тоже идет Тип поля radio
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
вывести решил немного по другому
Код
 echo JHTML::_ ('link', JRoute::_ ($link, FALSE), $order->ofis_ispolnitel, array('title' => JText::_ ('Внести изменения в заказ'). ' ' . $order->ofis_ispolnitel));
и вот суда мне надо добавить заголовок поля ofis_ispolnitel
поле в таблице _virtuemart_userinfos

либо просто
Код
<?php
echo $order->ofis_ispolnitel;
?>
Вывести
« Последнее редактирование: 05.03.2014, 16:13:05 от Stasweb »
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
очень сложно формулируете вопросы. Вы имеете ввиду наверное заголовок поля пользовательского? Тогда вам нужно делать выборку из таблицы virtuemart_userfields , выбирать тайтл по названию. Или вот еще вам вариантик воспользоватся моделью:
Код: php
if(!class_exists('VirtueMartModelUserfields')) require(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'userfields.php' );
$model = new VirtueMartModelUserfields;
$list = $model->getUserfieldsList();
foreach ($list as $item)
{
if($item->name == 'ofis_ispolnitel')
$title = JText::_($item->title);
}
echo $title;
 
интернет-блог: http://websiteprog.ru
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
Я как делаю в administrator/components/com_virtuemart/models/orders.php
Код
	public function getOrdersList($uid = 0, $noLimit = false)
{
// vmdebug('getOrdersList');
$this->_noLimit = $noLimit;

        $select = " o.*, CONCAT_WS(' ',u.first_name,u.middle_name,u.last_name) AS order_name "
.', u.virtuemart_user_id, u.dataj, u.time, u.last_name_2, u.ofis_ispolnitel, u.email as order_email,pm.payment_name AS payment_method ';

$from = $this->getOrdersListQuery();
/* $_filter = array();
if ($uid > 0) {
$_filter[] = ('u.virtuemart_user_id = ' . (int)$uid);
}*/

и в /administrator/components/com_virtuemart/views/orders/tmpl/orders.php
вывожу
Код
echo JHTML::_ ('link', JRoute::_ ($link, FALSE), $order->ofis_ispolnitel, array('title' => JText::_ ('Внести изменения в заказ'). ' ' . $order->ofis_ispolnitel));
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
Не могу закрыть вопрос с панелью администратора
точнее осталось вывести два нужных мне поля
 
1 поле это Офис исполнитель заказа
2 поле это Способ доставки

1 поле я хотел вывести так
Код
echo JHTML::_ ('link', JRoute::_ ($link, FALSE), $order->ofis_ispolnitel, array('title' => JText::_ ('Внести изменения в заказ'). ' ' . $order->ofis_ispolnitel)); 
у меня выводит только значение а не заголовок
но если пройти по этой ссылке то в заказе все нормально выводит

2 поле я хотел вывести так
Код
 echo $order->shipment_method;
не выводит не чего а вот
Код
echo $order->payment_method
способ оплаты выводит нормально
как их вывести
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
Доставку попробовал вывести так
Код
echo JFactory::getUser($order->virtuemart_shipmentmethod_id)->shipment_name;
в таблицы virtuemart_shipmentmethod
поле shipment_name заполнено



но выдает ошибку
Цитировать
JUser: :_load: Не удалось загрузить пользователя с ID: 1

а так
Код
 echo JText::_ ($order->virtuemart_shipmentmethod_id)->shipment_name; 
пустое поле
« Последнее редактирование: 06.03.2014, 09:21:14 от Stasweb »
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
если ставлю просто
Код
echo $order->virtuemart_shipmentmethod_id;
то выводит цифру 1
если ставлю
Код
echo $order->virtuemart_shipmentmethod_id->shipment_name;  
пусто
подскажите порядок или принцип подключения и вывода
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Код: php
require_once(JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'shipmentmethod.php');
$shipmentModel = VmModel::getModel('Shipmentmethod');
$shipmentModel->_id = $order->virtuemart_shipmentmethod_id;
$shipment = $shipmentModel->getShipment();
echo $shipment->shipment_name;
« Последнее редактирование: 06.03.2014, 15:04:14 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

Stasweb

  • Завсегдатай
  • 1501
  • 24 / 0
залил сайт на хостинг выдает ошибку в товарах
Код
vmError: exeSortSearchListQuery Unknown column
'u.last_name_2' in 'field list' SQL=SELECT SQL_CALC_FOUND_ROWS o.*,
CONCAT_WS(' ',u.first_name,u.middle_name,u.last_name)
AS order_name , u.virtuemart_user_id, u.dataj, u.time, u.last_name_2, u.ofis_ispolnitel, u.email as order_email,pm.payment_name AS payment_method
 FROM calcbook_virtuemart_orders as o LEFT JOIN calcbook_virtuemart_order_userinfos as u
 ON u.virtuemart_order_id = o.virtuemart_order_id AND u.address_type="BT"
  LEFT JOIN calcbook_virtuemart_paymentmethods_ru_ru as pm ON o.virtuemart_paymentmethod_id = pm.virtuemart_paymentmethod_id WHERE ( o.virtuemart_vendor_id = "1" ) ORDER BY created_on DESC LIMIT 0, 50

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

Как вывести ID товара в описании товара?

Автор Stasweb

Ответов: 8
Просмотров: 5291
Последний ответ 28.11.2022, 23:22:27
от Evgen Kulibin
Как вывести модуль в страницу VirtueMart?

Автор harddrop

Ответов: 11
Просмотров: 6019
Последний ответ 13.11.2022, 13:11:37
от Evgen Kulibin
Joomla 3 + VM + Universal AJAX Live Search - как вывести картики товара в поиске?

Автор PSN

Ответов: 10
Просмотров: 10543
Последний ответ 27.03.2022, 17:29:00
от Evgen Kulibin
Как вывести товар в пункт меню?

Автор Stasweb

Ответов: 8
Просмотров: 1132
Последний ответ 05.01.2021, 11:33:05
от rsn
Необходимо вывести главную в карту сайта

Автор Stasweb

Ответов: 4
Просмотров: 1078
Последний ответ 22.07.2020, 13:33:31
от Stasweb