Новости Joomla

Свои типы полей в Joomla.

Свои типы полей в Joomla.Это большая тема, о которой можно говорить очень много

Это большая тема, о которой можно говорить очень много. Самое главное, что возможности применения ограничиваются только вашей больной фантазией. Вы строите интерфейс своего модуля или плагина и вам нужно подтянуть данные из сторонней системы (список чего-нибудь по какому-нибудь API), чтобы сохранить выбранный id в Joomla. Или сделать какую-то проверку и в зависимости от неё показать то или иное сообщение пользователю. Для этого подойдут свои пользовательские типы полей. Интерфейс Joomla по большей части описан в XML-файлах. У каждого из них свои параметры. Некоторые не описаны в документации (manual.joomla.org), поэтому самым любопытным будет полезно заглянуть в собственно файлы фреймворка по пути

libraries/src/Form/FormField.php, а так же в
libraries/src/Form/Fields. У каждого класса поля перечислены его специфические свойства, которые можно описывать в XML. А в своём типе поля вы можете устанавливать эти значения программно. В моём модуле WT Quick links под капотом происходят изменения. Теперь для работы (в админке) ему нужен вспомогательный плагин. А в самом модуле нам бы проверить, а не выключен ли он? В Joomla есть тип поля Note - заметка. Его можно использовать для вывода примечаний.

<field type="note" name="your_note_for_user" label="Заголовок примечания" title="Альтернативный способ для заголовка" description="Текст примечания" class="col-12 alert alert-info" heading="h1" close="true" />

heading - указывать уровень заголовка.
close - позволяет закрыть это примечание. В классе поля
libraries/src/Form/Field/NoteField.php описана логика вывода. И в принципе оно нам подходит для нашей задачи. Но оно будет выводить сообщение всегда, а нам нужно только тогда, когда плагин отключён. Поэтому берём и создаём свой класс поля, который мы унаследуем от
NoteField. Это значит, что у нас в руках будет весь инструментарий стандартного поля
Note + то, что мы сами добавим. В XML-манифест добавляем наше поле

<field type="systempluginstatus" name="systempluginstatus" addfieldprefix="Joomla\Module\Wtquicklinks\Site\Fields"/>

-

type - имя файла и класса,-
addfieldprefix - указываем namespace к нашему классу, может быть любой нам нужный-
name - нельзя полю без имени...Это означает, что Joomla будет использовать класс поля из файла
modules/mod_wt_quick_links/src/Fields/SystempluginstatusField.php.А в классе поля будет написано следующее:

<?php // namespace для атрибута addfieldprefix namespace Joomla\Module\Wtquicklinks\Site\Fields; // нельзя напрямую обращаться к этому файлу defined('_JEXEC') or die; // подключаем родительский класс для переопределения use Joomla\CMS\Form\Field\NoteField; use Joomla\CMS\Language\Text; use Joomla\CMS\Plugin\PluginHelper; // имя класса и имя файла точь-в-точь class SystempluginstatusField extends NoteField { protected $type = 'Systempluginstatus'; protected function getLabel() { // если плагин не включён if(PluginHelper::isEnabled('system','wtquicklinks')) { // меняем свойства родительского класса $this->class = 'alert alert-danger w-100'; $this->element['label'] = '⚠️ А-а-а-а!'; $this->element['description'] = 'Плагин не включён!!'; // и просто рендерим его с нашими свойствами return parent::getLabel(); } // А иначе всё хорошо, скрываем поле из виду. $this->parentclass = 'd-none'; return ''; } }

Просто и удобно. И людям приятно, что о них позаботились и рассказали почему что-то не работает. @webtolkru#joomla #php #webdev #разработка

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

gavruwa

  • Осваиваюсь на форуме
  • 44
  • 1 / 0
Выглядит это таким образом



Зачем? Для удобства пользователей магазина.


Если кому-то интересно - отпишитесь, напишу как это реализовать.
*

gavruwa

  • Осваиваюсь на форуме
  • 44
  • 1 / 0
Итак:

1. Открываем ваш_сайт\components\com_jshopping\controllers - product.php и копируем строчку 172:
Код
$view->assign('enable_wishlist', $jshopConfig->enable_wishlist);

2. Открываем ваш_сайт\components\com_jshopping\controllers - category.php и вставляем этот код (из пункта №1) сюда (куда-нибудь в конец файла где идут строки "$view->assign").

3. Открываем ваш_сайт\components\com_jshopping\lib - functions.php - находим "function addLinkToProducts" и добавляем внутри
Код
$products[$key]->wish_link = SEFLink('index.php?option=com_jshopping&controller=cart&task=add&to=wishlist&category_id='.$category_id.'&product_id='.$products[$key]->product_id, $useDefaultItemId);

4. Открываем ваш_сайт\components\com_jshopping\templates\ВАШ_ШАБЛОН\category - category_default.php и добавляем (строка, примерно 140-142 после вывода
Код
<a href="<?php print $product->product_link?>"><?php print _JSHOP_DETAIL?></a> </div>
Код
<?php if ($this->enable_wishlist){?>
<a href ="<?php print $product->wish_link?>" class="button1"><?php print _JSHOP_ADD_TO_WISHLIST?></a> &nbsp;
<?php }?>

На этом все. После 4 не сложных cntrl+c и cntrl+v получаем кнопку "Добавить в список желаний" в общем списке товаров любой категории (картинка №1 из первого сообщения).

Небольшая просьба - если воспользовались данным методом, пожалуйста, отпишитесь.

ps. Если "не работает!!11 Пыщь-ПЫщЬ! ололо" - напишите. Добавлю, у кого трудности, все необходимые файлы.

ps. Версия Joomla - 1.7.3, версия JoomShopping - 3.2.7.
« Последнее редактирование: 05.12.2011, 18:02:47 от gavruwa »
*

Majestro

  • Захожу иногда
  • 170
  • 29 / 8
Теперь, аналогичным образом, осталось добавить поле для ввода количества :)
Многие интересовались, а у меня что-то ума не хватило... Буду тестировать.

А может, в следующей версии JS разработчики добавят возможность переноса всех функций (опции и атрибуты) из карточки товара в список товаров?
« Последнее редактирование: 05.12.2011, 18:12:09 от Majestro »
*

SDKiller

  • Живу я здесь
  • 2706
  • 329 / 5
  • ...ergo sum
А можно обойтись без хаков компонента (что насущно с учётом того, что обновляется он регулярно) сделав всё отдельным контроллером и правкой шаблона. Собственно так и делал всегда.
*

BaevAS

  • Захожу иногда
  • 116
  • 1 / 0
  • Время проведенное на рыбалке, в счет жизни не идет
Спасибо большое за решение.
Установил все по инструкции, кнопка появилась, но вот добавлять отказывается, добавление из карточки товара функционирует.
В чем может быть загвоздка, подробнее тут komof.ru
*

BaevAS

  • Захожу иногда
  • 116
  • 1 / 0
  • Время проведенное на рыбалке, в счет жизни не идет
Все разобрался сам

вот этот код
Код
$products[$key]->wish_link = SEFLink('index.php?option=com_jshopping&controller=cart&task=add&to=wishlist&category_id='.$category_id.'&product_id='.$products[$key]->product_id, $useDefaultItemId);

нужно вставить после
Код
if ($jshopConfig->show_buy_in_category){

соответственно должно быть вот так
Код
function addLinkToProducts(&$products, $default_category_id = 0, $useDefaultItemId = 0)  {

    $jshopConfig = &JSFactory::getConfig();

    foreach ($products as $key => $value) {

        $category_id = (!$default_category_id)?($products[$key]->category_id):($default_category_id);

        if (!$category_id) $category_id = 0;

        $products[$key]->product_link = SEFLink('index.php?option=com_jshopping&controller=product&task=view&category_id='.$category_id.'&product_id='.$products[$key]->product_id, $useDefaultItemId);

        if ($jshopConfig->show_buy_in_category){

   $products[$key]->wish_link = SEFLink('index.php?option=com_jshopping&controller=cart&task=add&to=wishlist&category_id='.$category_id.'&product_id='.$products[$key]->product_id, $useDefaultItemId);           

            if (!($jshopConfig->hide_buy_not_avaible_stock && ($products[$key]->product_quantity <= 0))){

                $products[$key]->buy_link = SEFLink('index.php?option=com_jshopping&controller=cart&task=add&category_id='.$category_id.'&product_id='.$products[$key]->product_id, $useDefaultItemId);       

            }

        }

    }

}

Все работает еще раз спасибо
*

BaevAS

  • Захожу иногда
  • 116
  • 1 / 0
  • Время проведенное на рыбалке, в счет жизни не идет
Полезная функция, обновился до 3.3.2, но разработчики оставили это без внимания, пришлось опять лезть в файлы.
Работает на J 1.7.3 + JS 3.3.2.
Просьба добавьте эту опцию в админку, как настройка отображения "Купить" с списке товаров
*

evpadallas

  • Захожу иногда
  • 171
  • 42 / 1
Если Вы вставите отображение кнопки добавления в вишлист после кнопки купить, то все будет так как вы хотите, потому что тогда будет срабатывать условие. На скриншоте же видно, что если товара нет в наличии, то и кнопок нет никаких.
*

hagaiFD

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
  • forum.mostaxi24.com
Странно ... но у меня и так... wishlist идет после cart...
« Последнее редактирование: 18.02.2012, 22:08:30 от hagaiFD »
*

evpadallas

  • Захожу иногда
  • 171
  • 42 / 1
Я мало что понял. Какое фото Вы хотите добавить?
*

Vitaliymedvid

  • Новичок
  • 4
  • 1 / 0
Я новичок в программировании, подскажите пожалуйста Какие поля нужно править для выведения поля "Количество" в общий список товаров? что то вроде этой инструкции:

Итак:

1. Открываем ваш_сайт\components\com_jshopping\controllers - product.php и копируем строчку 172:
Код
$view->assign('enable_wishlist', $jshopConfig->enable_wishlist);

2. Открываем ваш_сайт\components\com_jshopping\controllers - category.php и вставляем этот код (из пункта №1) сюда (куда-нибудь в конец файла где идут строки "$view->assign").

3. Открываем ваш_сайт\components\com_jshopping\lib - functions.php - находим "function addLinkToProducts" и добавляем внутри
Код
$products[$key]->wish_link = SEFLink('index.php?option=com_jshopping&controller=cart&task=add&to=wishlist&category_id='.$category_id.'&product_id='.$products[$key]->product_id, $useDefaultItemId);

4. Открываем ваш_сайт\components\com_jshopping\templates\ВАШ_ШАБЛОН\category - category_default.php и добавляем (строка, примерно 140-142 после вывода
Код
<a href="<?php print $product->product_link?>"><?php print _JSHOP_DETAIL?></a> </div>
Код
<?php if ($this->enable_wishlist){?>
<a href ="<?php print $product->wish_link?>" class="button1"><?php print _JSHOP_ADD_TO_WISHLIST?></a> &nbsp;
<?php }?>

На этом все. После 4 не сложных cntrl+c и cntrl+v получаем кнопку "Добавить в список желаний" в общем списке товаров любой категории (картинка №1 из первого сообщения).

Небольшая просьба - если воспользовались данным методом, пожалуйста, отпишитесь.

ps. Если "не работает!!11 Пыщь-ПЫщЬ! ололо" - напишите. Добавлю, у кого трудности, все необходимые файлы.

ps. Версия Joomla - 1.7.3, версия JoomShopping - 3.2.7.


Спасибо gavruwa за такую инструкцию.
*

ELLE

  • Глобальный модератор
  • 4510
  • 893 / 0
можно без хаков ядра, только в шаблон добавить

Код: php
<?php
$wish = JRoute::_('index.php?option=com_jshopping&controller=cart&task=add&to=wishlist&category_id=' .$product->category_id. '&product_id=' .$product->product_id. '');
?>
<a href="<?php print $wish?>"><?php print _JSHOP_ADD_TO_WISHLIST?></a>
*

Single92

  • Захожу иногда
  • 134
  • 2 / 0
можно без хаков ядра, только в шаблон добавить

Код: php
<?php
$wish = JRoute::_('index.php?option=com_jshopping&controller=cart&task=add&to=wishlist&category_id=' .$product->category_id. '&product_id=' .$product->product_id. '');
?>
<a href="<?php print $wish?>"><?php print _JSHOP_ADD_TO_WISHLIST?></a>

Отличное решение) 

Но при клике переходит в карточку товара и требует выбрать атрибут если таковой имеется.

А есть ли возможность сделать что бы в блокнот товар добавлялся без выбора атрибута и перехода в картучку товара? :)
*

nevigen

  • Moderator
  • 10447
  • 863 / 25
  • http://n*****n.com
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

Single92

  • Захожу иногда
  • 134
  • 2 / 0
Только если атрибуты так же вывести, да?
*

spas

  • Захожу иногда
  • 56
  • 0 / 0
  • Интернет, как и смерть - забирает лучших.
Теперь, аналогичным образом, осталось добавить поле для ввода количества :)
Многие интересовались, а у меня что-то ума не хватило... Буду тестировать.

А может, в следующей версии JS разработчики добавят возможность переноса всех функций (опции и атрибуты) из карточки товара в список товаров?
А каким способом везде убрать поле для ввода количества ?
*

dmitry_stas

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

spas

  • Захожу иногда
  • 56
  • 0 / 0
  • Интернет, как и смерть - забирает лучших.
отредактировать шаблоны и удалить input для количества
Понятное дело а подробнее если не трудно где удалить input ?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
в ФАКе есть список файлов шаблона
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

spas

  • Захожу иногда
  • 56
  • 0 / 0
  • Интернет, как и смерть - забирает лучших.
в ФАКе есть список файлов шаблона
Спасибо за направление убрал
*

intcorp

  • Захожу иногда
  • 456
  • 12 / 0
Re: Кнопка
« Ответ #21 : 08.09.2022, 10:51:11 »
<?php
$wish = JRoute::_('index.php?option=com_jshopping&controller=cart&task=add&to=wishlist&category_id=' .$product->category_id. '&product_id=' .$product->product_id. '');
?>
<a href="<?php print $wish?>"><?php print _JSHOP_ADD_TO_WISHLIST?></a>
можно без хаков ядра, только в шаблон добавить


В JoomShopping 5 работает, но может есть решение по свежее с учетом изменений в коде (помимо <?php print JText::_('JSHOP_ADD_TO_WISHLIST')?> )?
*

kit2m2

  • Живу я здесь
  • 3345
  • 273 / 0
  • Беру сайты на полное сопровождение
Re: Кнопка
« Ответ #22 : 08.09.2022, 12:27:21 »
В JoomShopping 5 работает, но может есть решение по свежее с учетом изменений в коде (помимо <?php print JText::_('JSHOP_ADD_TO_WISHLIST')?> )?
Plugins: Button wishlist in products list
Расширения для JoomShopping | Ссылка на Телеграм-канал | Сайты и магазины под ключ: Дизайн, Верстка, Программирование (расширения на заказ), СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ (5+) и JoomShopping 5+
*

IgorGeneralov

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Решено] Вывод 3-х первых картинок в списке товаров категории

Автор rudoy24

Ответов: 30
Просмотров: 11593
Последний ответ 19.07.2024, 11:41:28
от juleczka
Определить расширение. pop_description для списка товаров

Автор Alex_gs

Ответов: 3
Просмотров: 1777
Последний ответ 24.09.2023, 12:18:34
от kit2m2
[Решено] Увеличение выбора покупаемых товаров + -

Автор Aspik

Ответов: 216
Просмотров: 47325
Последний ответ 02.08.2023, 21:31:25
от kit2m2
Смена фото при наведении в списке товаров категории

Автор Taatshi

Ответов: 57
Просмотров: 5656
Последний ответ 15.06.2023, 15:53:25
от Akeksandr
Шаблон фильтрации товаров

Автор Prevergenec

Ответов: 1
Просмотров: 2123
Последний ответ 23.01.2023, 18:13:43
от kit2m2