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

Shiffer

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
Часто клиенты, обращаясь в интернет-магазин не знают своего номера заказа. Легко их идентифицировать можно по номеру телефона который они указывали при оформлении.
Для того чтобы поиск по заказам в админке производился так же по номеру телефона, необходимо в файле
ваш_сайт\administrator\components\com_jshopping\models\orders.php
подредактировать строчку
Код
$where .= " and (O.`order_number` like '%".$search."%' or O.`f_name` like '%".$search."%' or O.`l_name` like '%".$search."%' or O.`email` like '%".$search."%' or O.`firma_name` like '%".$search."%' or O.`d_f_name` like '%".$search."%' or O.`d_l_name` like '%".$search."%' or O.`d_firma_name` like '%".$search."%' or O.order_add_info like '%".$search."%') ";
добавив в нее еще одно поле по которому будет производится поиск, что бы получилось вот так
Код
$where .= " and (O.`order_number` like '%".$search."%' or O.`f_name` like '%".$search."%' or O.`l_name` like '%".$search."%' or O.`email` like '%".$search."%' or O.`firma_name` like '%".$search."%' or O.`d_f_name` like '%".$search."%' or O.`d_l_name` like '%".$search."%' or O.`d_firma_name` like '%".$search."%' or O.order_add_info like '%".$search."%' or O.`mobil_phone` like '%".$search."%') ";
Можете заменить mobil_phone на просто phone, в зависимости какое поле у Вас заполняется при оформлении заказа. *DRINK*
*

Biss

  • Давно я тут
  • 995
  • 101 / 0
Да, только после апдейта слетит. Надо переопределить хотя бы
*

Shiffer

  • Осваиваюсь на форуме
  • 34
  • 0 / 0
Да, только после апдейта слетит. Надо переопределить хотя бы
Не знал, что \administrator\ тоже можно переопределять.
*

dmitry_stas

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

Biss

  • Давно я тут
  • 995
  • 101 / 0
Да, заблудился чуток  :). подумал про шаблон
*

Ler_Chak

  • Новичок
  • 9
  • 0 / 0
возможно ли сделать чтобы он искал номер телефона, если он был заполнен в разных форматах? Например 8 800 800 88 88 или 88008888...
*

kit2m2

  • Живу я здесь
  • 3345
  • 273 / 0
  • Беру сайты на полное сопровождение
Если в админке, то лучше сделать маску при заполнении, а старые данные привести в единый вид.

Сортировку в заказах делал, а поиск никто не спрашивал...
Расширения для JoomShopping | Ссылка на Телеграм-канал | Сайты и магазины под ключ: Дизайн, Верстка, Программирование (расширения на заказ), СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ (5+) и JoomShopping 5+
*

a-vikalingvo

  • Захожу иногда
  • 51
  • 7 / 0
возможно ли сделать чтобы он искал номер телефона, если он был заполнен в разных форматах?
Вы не должны хранить номера телефонов в разных форматах !
Формат должен быть один ( без пробелов, плюсов, минусов или тире );
Это ж в элементе сделать 
Код
$phone = preg_replace('/[^0-9]/', '', $phone);
*

Ler_Chak

  • Новичок
  • 9
  • 0 / 0
Делали маску, это не проблема. Но в итоге было такое, что клиенты вводили номер неправильно, не обращая внимания на маску ввода..в итоге убрали. Сейчас добавили в админке поиск по номеру телефона клиента но встал вопрос в том, что ввод номера отличается. Вот и поинтересовалась возможно ли сделать поиск по номеру в не зависимости от формы заполнения. Если такого варианта нет, то конечно маску ввода добавим, чего бы очень не хотелось..
*

Ler_Chak

  • Новичок
  • 9
  • 0 / 0
Но если и добавлять обратно маску для создания заказа, тогда вопрос в том, что сотрудники кол-центра создавая заказ самостоятельно делают это без маски, можно поставить маску для ввода тел и в админ панели при создании заказа?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
возможно ли сделать поиск по номеру в не зависимости от формы заполнения
Возможно.
можно поставить маску для ввода тел и в админ панели при создании заказа
Можно.
nometa.xyz
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Ler_Chak

  • Новичок
  • 9
  • 0 / 0
Если про маску ввода номера  в админ панели при создании заказа еще все понятно, то про поиск по номеру в не зависимости от формы заполнения, нет- не получается. Была бы очень благодарна за подсказку куда поддаться  !

*

Ler_Chak

  • Новичок
  • 9
  • 0 / 0
Возможно.Можно.
nometa.xyz

Подскажите как?
« Последнее редактирование: 14.10.2020, 21:37:44 от Ler_Chak »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Подскажите как?
К сожалению, готового решения нет. Если вкратце, то надо добавить маленькое where в запрос. Тут много спецов, они вам помогут.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

sivers

  • Живу я здесь
  • 2578
  • 357 / 0
Если про маску ввода номера
Делал недавно подобное. Тоже пришлось решать вопрос с масками. В итоге решил хранить номера телефонов, состоящие только из цифр (перед записью в БД все нецифровые символы из номера удаляются).
При поиске так же - сперва в введенном номере чистим все символы, кроме цифр и потом ищем. При выводе номера на сайте - форматируем по маске.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Ler_Chak

  • Новичок
  • 9
  • 0 / 0
возможно ли сделать чтобы он искал номер телефона, если он был заполнен в разных форматах? Например 8 800 800 88 88 или 88008888...

Что, никто не подскажет как осуществить поиск по номеру в списке заказов, если номера в разных форматах были заполнены ( с пробелом и без )?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Мы не знаем все варианты форматов внесенных телефонов. Если дело в пробелах, то:
1. Смотрим первый пост ТС и немножко изменим его вариант:
Код
OR REPLACE(O.`phone`, " ", "") LIKE '%".$search."%'
Данное изменение сотрется при первом апдейте.
2. Напишем плагинчик на событие onBeforeQueryGetAllOrders и изменим запрос. Этот вариант более предпочтителен - апдейт не затронет наш код.
Если вы не можете сами сделать, то не жалейте немного денег на пиво, создайте тему в разделе "Предлагаю работу".
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Ler_Chak

  • Новичок
  • 9
  • 0 / 0
Мы не знаем все варианты форматов внесенных телефонов. Если дело в пробелах, то:
1. Смотрим первый пост ТС и немножко изменим его вариант:
Код
OR REPLACE(O.`phone`, " ", "") LIKE '%".$search."%'
Данное изменение сотрется при первом апдейте.
2. Напишем плагинчик на событие onBeforeQueryGetAllOrders и изменим запрос. Этот вариант более предпочтителен - апдейт не затронет наш код.
Если вы не можете сами сделать, то не жалейте немного денег на пиво, создайте тему в разделе "Предлагаю работу".

Попробовала добавить, ошибка: syntax error, unexpected '", "' (T_CONSTANT_ENCAPSED_STRING)


Код
if ($filters['text_search']){
            $search = $db->escape($filters['text_search']);
            $where .= " and (O.`order_number` like '%".$search."%' or O.`f_name` like '%".$search."%' or O.`l_name` like '%".$search."%' or O.`email` like '%".$search."%' or O.`firma_name` like '%".$search."%' or O.`d_f_name` like '%".$search."%' or O.`d_l_name` like '%".$search."%' or O.`d_firma_name` like '%".$search."%' or O.order_add_info like '%".$search."%' OR REPLACE (O.`phone`, " ", "") LIKE '%".$search."%') ";
        }

        if (!$filters['notfinished']) $where .= "and O.order_created='1' ";
*

anatol81n

  • Захожу иногда
  • 82
  • 2 / 0
я тоже не знал что модель можно переопределять :) если конечно речь идет о шаблоне Joomla
зачем переопределять модель, когда там есть событие. можно написать плагин, который скорректирует запрос
*

anatol81n

  • Захожу иногда
  • 82
  • 2 / 0
по поводу форматов телефонов, хранить конечно нужно в формализованном виде, но об этом никто раньше не думал и ...
вопщем можно искомый телефон почистить от всего кроме цифр, убедиться что там нужное кол-во цифр и добавить в запрос что-тотипа:

LIKE '.$db->quote('%'.str_split($search))
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Мы починили поиск для JoomShopping

Автор Dimidrol-Pruper

Ответов: 101
Просмотров: 33588
Последний ответ 24.06.2024, 14:20:58
от kit2m2
Имеется ли решения дополнительного статуса заказа?

Автор dss

Ответов: 5
Просмотров: 1019
Последний ответ 17.08.2021, 09:14:35
от nevigen
Отправка сообщения админу в не зависимости от статуса заказа

Автор newalex

Ответов: 4
Просмотров: 703
Последний ответ 23.04.2021, 10:30:56
от newalex
Поиск в заказах по полю комментарий? Реализация?

Автор aLLex177

Ответов: 15
Просмотров: 1746
Последний ответ 16.02.2021, 13:57:58
от dss
Уведомления о смене статуса заказа

Автор anny_k

Ответов: 10
Просмотров: 1096
Последний ответ 04.12.2020, 21:01:24
от nevigen