Задать вопрос
Ответы пользователя по тегу Joomla
  • Joomla Sopping событие добавления товара?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    Да, поймать событие можно. Посмотрите в качестве примера код плагина для отправки заказов JoomShopping в Битрикс 24 - GitHub.
    Также можно посмотреть код плагинов кастомных полей для JoomShopping, Там не доведено до уровня публичного решения, но вчерне работает, поэтому в качестве иллюстрации подойдёт - GitHub.

    Только скорее всего при такой интеграции возникнет проблема: что будет ведущим - Joomla или Битрикс24? Если кто-то обновит данные в Битрикс 24 - должны ли тогда обновляться данные в JoomShopping (смотрим ещё плагин)? Обновление в реальном времени или по расписанию и т.д.
    Ответ написан
    Комментировать
  • Форма регистрации на Joomla 4 как подтянуть данные из БД?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    Архитектурно такое делается системным плагином или плагином группы user. Плагин на событие onContentPrepareForm должен проверить форму и добавить туда свой xml.
    public function onContentPrepareForm(Event $event): void
        {
            $form     = $event->getArgument(0);
            $formName = $form->getName();
    
            // Проверяем имя формы, чтобы не добавить таб в материалы или ещё куда-нибудь
            if ($formName === 'com_users.user')
            {
                Form::addFormPath(JPATH_SITE . '/plugins/user/wtamocrmusersync/form');
                // fields - это имя файла в указанной папке - fields.xml
                $form->loadFile('amocrm', false);
                // грузим языковые константы для формы
                $lang      = $this->getApplication()->getLanguage();
                $extension = 'lib_webtolk_amocrm';
                $base_dir  = JPATH_SITE;
                $lang->load($extension, $base_dir);
            }
        }

    В xml-файле форма с кастомным полем:
    <?xml version="1.0" encoding="UTF-8"?>
    <form>
        <fieldset name="wtamocrm" label="PLG_WTAMOCRMUSERSYNC_WTAMOCRM_FIELDSET_LABEL">
            <field
                    name="amocrm_user_info"
                    addfieldprefix="Webtolk\Amocrm\Fields"
                    type="amocrmcontactinfo"
                    joomlauseridsource="id"
                    showtags="true"
                    label="PLG_WTAMOCRMUSERSYNC_USER_PROFILE_AMOCRM_INFO"
            />
        </fieldset>
    </form>


    Само поле состоит из класса поля и, желательно, лейаута (макета вывода). Класс поля у меня выглядит так, так как я использую лейаут для вывода разметки.
    <?php
    /**
     * @package       WT Amocrm Library
     * @version       1.3.0-alpha2
     * @Author        Sergey Tolkachyov, https://web-tolk.ru
     * @copyright  (c) 2022 - May 2025 Sergey Tolkachyov. All rights reserved.
     * @license       GNU/GPL3 http://www.gnu.org/licenses/gpl-3.0.html
     * @since         1.0.0
     */
    
    namespace Webtolk\Amocrm\Fields;
    defined('_JEXEC') or die;
    
    use Joomla\CMS\Factory;
    use Joomla\CMS\Form\FormField;
    use Joomla\CMS\Language\Text;
    use Webtolk\Amocrm\Amocrm;
    use Webtolk\Amocrm\Helper\UserHelper as AmocrmUserHelper;
    
    class AmocrmcontactinfoField extends FormField
    {
    
    	protected $type = 'Amocrmcontactinfo';
        protected $layout = 'libraries.webtolk.amocrm.fields.amocrmcontactinfo';
    
        /**
         * Method to get the data to be passed to the layout for rendering.
         *
         * @return  array
         *
         * @since 1.3.0
         */
        protected function getLayoutData(): array
        {
            $layoutData = parent::getLayoutData();
    
            $joomlauseridsource = (!empty($this->element['joomlauseridsource'])) ? (string)$this->element['joomlauseridsource'] : '';
    
            // `joomlauserid` param has a higher priority
            if(!empty($this->element['joomlauserid'])) {
                $joomlauserid = (int)$this->element['joomlauserid'];
            } elseif(!isset($this->element['joomlauserid']) && !empty($joomlauseridsource)) {
                $joomlauserid = Factory::getApplication()->getInput()->getInt($joomlauseridsource, 0);
            }
            // Тут ещё куча проверок и условий.
            // Сокращаем...
    
            $layoutData['has_amocrm_contact_id'] = true;
            $amocrm         = new Amocrm();
            $result_amo_crm = $amocrm->contacts()->getContactById($contact_id);
            if (!empty($result_amo_crm->error_code))
            {
                $layoutData['label'] = '<span class="badge bg-danger"><i class="fa-solid fa-triangle-exclamation"></i></span> '.$layoutData['label'];
                $layoutData['has_error'] = true;
                $layoutData['amocrm_error'] = $result_amo_crm;
    
            } else {
    
                $layoutData['contact_info'] = $result_amo_crm;
                $layoutData['contact_link'] = $amocrm->getRequest()->getAmoCRMHost()->setPath('/contacts/detail/'.$contact_id);
    
            }
    
            return $layoutData;
        }
    }

    Если вёрстка простая, то иногда можно вместо getLayoutData() всё делать в методе getInput(), но это уже хардкод и не будут поддерживаться переопределения макетов. Так лучше не делать. В getLayoutData() можно сделать нужные запросы в базу, но лучше использовать модели ядра Joomla. Если же это кастомные таблицы, то свой код лучше оформить в виде какого-нибудь расширения Joomla - либо плагин, либо библиотеку. Пример с библиотекой дан выше. Методы плагинов Joomla можно использовать извне следующим образом:
    use Joomla\CMS\Factory;
    
    // Указываем группу плагина и element
    $myPlugin = Factory::getApplication()->bootPlugin('system', 'myplugin');
    // И вызываем нужный нам метод плагина "Сделать хорошо"
    $result = $myPlugin->doItWell();

    А уже в плагине сделать нужные методы, но при этом не подключать никакие события Event Dispather.
    Результат выглядит так:
    682ed967ded51809855292.png
    Ответ написан
    Комментировать
  • Как сделать Личный кабинет для пользователя Joomla?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    Я бы посоветовал использовать не Joomla (как это ни странно), а какой-нибудь сервис таск-менеджера + тайм-трекера, в духе T Metric (зарубежный) или Moo.Team (отечественный). Там есть клиентский доступ к вашим задачам и отчетам по затраченному времени. Это не так дорого стоит и в конечном счете все равно окупится.
    На Joomla можно на материалах что-то наваять, есть компоненты тикет-систем. Вариантов много
    Ответ написан
    Комментировать
  • Joomla 5 как вывести модуль в файле php?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    Вообще это неправильный подход - выводить что-то из Joomla за пределами Joomla, в сторонних файлах. Еще одна точка входа в Приложение - потенциальная дыра в безопасности как минимум. Скорее всего вы, двигаясь к своей цели, поставили себе неверную задачу. Расскажите подробнее, что вы хотите сделать?
    Ответ написан
    Комментировать
  • Как создать плагин, реализующий кастомный тип поля в Joomla 5?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    1. Вы пытаетесь сделать плагин по странной смеси старой и новой архитектуры плагинов Joomla. Скорее всего вам выдал этот код какой-то не очень умный ИИ.

    Документация (актуальная) Joomla о том как работают формы
    Читаем статью на Хабре Создание плагинов с учётом новой структуры Joomla 4. Плюс там же на Хабре, в хабе Joomla смотрим статьи и посты по теме.
    Смотрим книгу греческого Joomla-разработчика Николаса Дионисопулоса Joomla Extensions Development. Она про Joomla 4 и Joomla 5.

    Пример плагина пользовательского поля по стандартам Jooml.... Еще один пример - WT Yandex map плагин пользовательского поля Яндекс..., GitHub.

    Для реализации загрузки вам нужно обработчик либо свой писать, либо пытаться использовать com_media стандартный. А так существует плагин пользовательского поля Radical MultiField сайт, GitHub, статья. В сочетании с компонентом файлового менеджера Quantum Manager от того же разработчика у вас будет готовый функционал drag'n'drop загрузки фотографий в Joomla.
    Ответ написан
    Комментировать
  • Joomla 3.10.12 добавляет в url start на страницах пагинации, как это пофиксить?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    Это нормальное поведение движка. Так и должно быть.
    Ответ написан
    Комментировать
  • Почему такое перенаправление страницы админки?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    Либо htaccess лежит в сайт/administrator, либо всё же плагин "защиты" стоит какой-то. Попробуйте сайт/administrator/index.php. Nginx используете?
    Ответ написан
  • Как правильно создать многострочное содержимое INI языкового файла для Joomla CMS?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    Привет. Правильно туда просто HTML поместить, если содержимое этой константы будет отображаться в веб-интерфейсе.
    Ответ написан
  • Выдаёт системную ошибку при создании нового материала на Joomla ‎5.0.1‎ и как от него избавиться?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    Для чего вам Route66? Что он такого делает, что вы сами не можете сделать? Компонент существует очень давно, на современную архитектуру расширений Joomla 5 его вряд ли переписали, так как это требует очень больших ресурсов со стороны разработчиков. На крупные компоненты уходит почти год работы.

    Ну а на скриншоте у вас не ошибка, а предупреждение PHP. Отключите показ ошибок в админке и все. Должно помочь. Ну и разработчикам можно на форум написать куда-нибудь, чтоб они знали об ошибке.
    Ответ написан
    2 комментария
  • Как автоматически дублировать посты из telegram на сайт joomla?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    Есть плагин - TCI разработчика AlekVolsk. Распространялся на платной основе. Можно купить. Так посты из телеграм канала русского Joomla-сообщества постятся на joomlaportal.ru
    Ответ написан
    Комментировать
  • Joomla 4 JComment 3.07 Произошла ошибка 0 Call to a member function getContent() on null?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    JComments уже много лет находится на поддержке сообщества. Автор компонента оставил его в 2016 году. Версия для Joomla 4 также появилась и развивается благодаря усилиям сообщества. Последнюю актуальную версию JComments можно скачать с GitHub. Там же можно в Issue написать о проблемах с компонентом. Обновитесь сначала на тестовой копии сайта, потом, если всё ок - на боевой. Возможно Ваша проблема уже исправлена.
    И приходите в телеграм чат Joomla-сообщества.
    Ответ написан
    Комментировать
  • Как удалить или не исполнять часть кода PHP в зависимости от URL страницы?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    Судя по наличию хелпера MusColHelper - у Вас там кастомный какой-то компонент - com_muscol. Если он написан по канонам джумлы, то можно попробовать сделать переопределение макета и в сущности уже выбрать этот макет. Если нет, то сделать костыль, конечно, можно. Но как только изменится URL этой страницы (алиас поменяют, например), оно перестанет работать.
    Какая джумла у вас там: 2.5.28 или 3.х? Bootstrap 2 (CSS фреймворк) давненько уже устарел, лет этак 10 уже
    Чтобы правильно определить исключаемый адрес, нужно отключить SEF в настройках и посмотреть на адрес нужной страницы вида index.php?option=com_muscol&view=artist&artist_id=123 и т.д.
    В файле макета нужно брать GET-параметры из URL и сравнивать нужные:

    $input = JFactory::getApplication()->input; // объект для получения данных из суперглобальных массивов в joomla
    $option = $input->getCmd('option', ''); // мы в нашем компоненте muscol
    $view = $input->getCmd('view', ''); // view=artist - на странице просмотра артиста
    $artist_id= $input->getInt('artist_id', ''); // id артиста

    А дальше смотрим, что для артиста с конкретным id мы что-то не показываем:
    <?php if($option == 'com,_muscol' && $view == 'artist' && $artist_id != '999999') : ?>
     Тут помещаем HTML, который нужно показывать для ВСЕХ артистов КРОМЕ артиста с ID = 999999
    <?php endif; ?>

    А вообще приходите в телеграм чат Joomla-сообщества, там быстрее подскажут.
    Ответ написан
    Комментировать
  • Почему не работают скрипты после плавного перехода на joomla 3?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    Я думаю, здесь Joomla не причем. Нужно смотреть ошибки в консоли браузера.
    Ответ написан
    Комментировать
  • Как в обработать If-Modified-Since в Joomla?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    Нужно писать системный плагин или плагин группы Вашего компонента, для которого нужно модифицировать заголовок. А в нём уже код, который Вам уже подсказали выше.
    Только для Joomla 4 он подустарел. Обновить с использованием namespace нужно
    Ответ написан
    Комментировать
  • 5 000 000 статей возможно на Джумле?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    Судя по этой статье, joomla может. Но нужно понять что по итогу будет: характеристики у статей - это товары какие-то? Не похоже на простой контентный сайт.
    JoomSocial надо любить таким, какой он есть. При необходимости добавить свой функционал упретесь в сложность расширения, так как его авторы поддерживают код аж на 4 версии joomla и внутри там треш, к сожалению. Может имеет смысл посмотреть в сторону Community Builder
    Ответ написан
    Комментировать
  • Возможно ли заполнять и отправлять форму отправки на плагине Radical Form на Joomla через JS?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    Я так понимаю, что кнопок с классом .btn на странице может быть несколько. Лучше использовать уникальные id. Также попробуйте строгое сравнение ===
    Ответ написан
    Комментировать
  • Как вывести в тайтл цену?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    Есть готовый плагин SEO шаблонов для тайтлов и meta description для JoomShopping - WT SEO Meta templates https://web-tolk.ru/dev/joomla-plugins/wt-seo-meta...
    Для работы потребуется 2 плагина: основной и плагин-провайдер. Настройки делаются в провайдере (информация по ссылке)
    Ответ написан
    Комментировать
  • Как сделать общую авторизацию между доменом и зеркалом?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    В Joomla 4 есть REST API. Посмотрите в эту сторону.
    Ответ написан
  • Как проще перенести контент с Joomla 2.5 на Joomla 4.2.3?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    Я бы попробовал именно поступенными миграциями. Если только контент используется, без сторонних расширений, то должно нормально пройти всё.
    Только учтите, что при обновлении с 3.10.11 до четверки нужно сначала обновиться до 4.0.4 (обязательно), а потом уже можно и до последней. Найдено опытным путём.
    Ответ написан
  • Как удалить папку установки joomla с хостинга?

    sergeytolkachyov
    @sergeytolkachyov
    https://web-tolk.ru
    Можно поискать как это сделано в инсталляторе Joomla. Он же делает то же самое.
    Ответ написан
    Комментировать