Новости Joomla

Загадочный параметр $live_site в configuration.php Joomla

Загадочный параметр $live_site в configuration.php Joomla

👩‍💻 Загадочный параметр $live_site в configuration.php Joomla. Зачем он нужен?Давным-давно, когда Joomla ещё была маленькой, в неё внедрили параметр $live_site. В ней хранился домен текущего сайта на случай, если Joomla не могла его определить из-за неверной настройки сервера. Нужно это было для разных SEO-компонентов, для использования редиректов и т.д.Со временем для работы собственно сайта этот параметр перестал быть нужным. Уже в начале 2010-х стали встречаться рекомендации оставлять этот параметр пустым, дабы оный не привёл к лишним проблемам и путанице. Тем более, в web-админке нет места, где его можно указать или посмотреть его значение. Только в configuration.php, а туда смотрят не часто.Однако, параметр всё же остался в ядре Joomla. Зачем он нужен? А нужен он в 2-х случаях:- для работы класса Joomla\CMS\Uri\Uri, который часто используется в коде Joomla для работы методов

Uri::root() и
Uri::base(), а значит может влиять и на работу в том числе ajax-скриптов.- для работы Joomla в CLI - командной строке сервера. В случае если вы используете в вашем CLI-плагине методы опять-таки класса Uri, то CLI ничего не знает о текущем домене, так как запускается вне web-сервера. Поэтому домен нужно указывать принудительно. Либо с помощью параметра командной строки
--live-site, например,
—live-site=https://site.ru/. Со слешем на конце, иначе в CLI адрес сайта станет
https://site.rujoomla.php.Либо в параметре
$live_site в файле configuration.php, так как
CliApplication берёт настройку оттуда, если параметр команды не указан или пуст.⚠️ Иначе в качестве хоста и url класса Uri будет установлено
https://joomla.invalid/set/by/console/application. В самом же коде команды получить параметр
$live_site можно из объекта приложения

protected function doExecute(InputInterface $input, OutputInterface $output): int    {         //...              $live_site = $this->getApplication()->get('live_site');         //...    }
и исходя из этого строить дальнейшую логику.@joomlafeed#joomla #разработка #php #cli

Вышел плагин AllVideos v.7.0 от JoomlaWorks

Вышел плагин AllVideos v.7.0 от JoomlaWorks

Вышел плагин AllVideos v.7.0 от JoomlaWorks.Этот контент-плагин - одно из старейших расширений для Joomla. Его задача - преобразовывать шорт-коды вида

{YOUTUBE}...{/YOUTUBE},
{MP3}parth/to/file.mp3{/MP3} и подобные во встроенные видео или аудио.👩‍💻 v.7.0.0. Что нового?- Добавлена поддержка Youtube Shorts. Просто скопируйте полный url видео и вставьте его внутри тегов
{YOUTUBE}...{/YOUTUBE}.- Поддержка Joomla 5.x без плагина обратной совместимости. PHP 5, PHP 7, PHP 8. - Индексация умным поиском в CLI. В Joomla 5 плагин перестал вызывать ошибку при индексации контента умным поиском через CLI,Заметьте, что этот один и тот же пакет для всех версий Joomla, начиная с 1.5.x и заканчивая 5.x. Технически "под капотом" код плагина по сути не менялся, а для поддержки следующих версий Joomla авторы вставляют "заплатки". Плагин всё ещё использует старую архитектуру файлов и классов Joomla, что, к сожалению, заставляет прибавлять к его описанию слова "пока ещё" - "пока ещё работает".
Страница расширенияGitHub расширенияJoomla Extensions Directory👩‍💻 За ссылку спасибо самому внимательному участнику нашего сообщества - Ринату Кажетову (@rkazhet).@joomlafeed#joomla #расширения

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

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Код: php
$field = new SimpleXMLElement( '<field type="text" name="test" label="test"/>' );
$form->setField( $field, 'params' );

а можно и так
Код: php
JForm::addFormPath( __DIR__ . '/fields' );
$form->loadFile( 'add', false );
В папку fields кидаем файл add.xml с таким содержимым
Код: php
<?xml version="1.0" encoding="utf-8"?>
<form>
    <fields name="attribs">
        <fieldset name="basic" label="COM_CONTENT_ATTRIBS_FIELDSET_LABEL">
            <field name="field1" type="text" label="Title:" value=""></field>
        </fieldset>
    </fields>
</form>
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
уже пробовал эти варианты

вроде всё просто: $form->setField($element, $group) но не работает

а без fieldset $form->setField($element) работает
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
а можно больше конкретики что пытаетесь сделать?
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
добавить поле в форму в <fields name="properties">

а в шаблоне вывести:
Код: php
ul class="adminformlist">
<?php foreach ($this->form->getFieldset('properties') as $field) : ?>
<li>
<?php echo $field->label; ?>
<?php echo $field->input; ?>
</li>
<?php endforeach; ?>
</ul>
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
это ваш компонент или сторонний? и покажите XML файл
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
компонент мой
вот XML
Код: xml
<fields name="properties">
<fieldset name="properties">

</fieldset>
</fields>
и я понял почему не работает:
Код: php
$form->setField($element, 'properties')
добавляет не в fieldset, а в fields
а в шаблоне я вывожу fieldset
Код: php
<ul class="adminformlist">
<?php foreach ($this->form->getFieldset('properties') as $field) : ?>
<li>
<?php echo $field->label; ?>
<?php echo $field->input; ?>
</li>
<?php endforeach; ?>
</ul>
поэтому ничего не выводится
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
если компонент ваш то для чего вы добавляете поле?

можно сделать так:
модель
Код: php
public function getForm( $data = array(), $loadData = true )
{
$xmlData = 'Тут пихаете всю XML-ку в виде строки и при каком то условии можете менять данные';
$form = $this->loadForm( $xmlData, $xmlData, array( 'control' => 'jform', 'load_data' => $loadData ) );
if ( empty( $form ) ) {
return false;
}
return $form;
}
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
если компонент ваш то для чего вы добавляете поле?
поля добавляются на лету так как создаются в админке
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
а ну тогда просто формируйте XML файл в виде строки и кормите как я писал в 9 ответе! я так делаю в своем компоненте конструктора форм
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
да, получилось, пришлось формировать SimpleXMLElement со структурой, аналогичной xml-файлу, а затем выполнить $form->load(SimpleXMLElement)

Код: php
$xmlform = new SimpleXMLElement('<form />');
$xmlfields = $xmlform->addChild('fields');
$xmlfields->addAttribute('name', 'properties');
$xmlfieldset = $xmlfields->addChild('fieldset');
$xmlfieldset->addAttribute('name', 'properties');
$xmlfield = $xmlfieldset->addChild('field');
$xmlfield->addAttribute('name', 'property');
$xmlfield->addAttribute('type', 'text');
$xmlfield->addAttribute('label', 'COM_REALTY_FIELD_PROPERTY_LABEL');
if (!$form->load($xmlform))
{
die('Ошибка');
}
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
да, получилось, пришлось формировать SimpleXMLElement со структурой, аналогичной xml-файлу, а затем выполнить $form->load(SimpleXMLElement)
Ну я бы на вашем месте переписал на формирование обычной строкой!
кода будет в разы меньше и быстродействие будет по выше! как по мне клепать c нуля XML через simpleXml это изврат! ладно бы надо было распарсить и добавить элемент!
но так у вас выйдет кода в 10 раз больше )
« Последнее редактирование: 16.04.2013, 03:33:10 от Istaan »
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
поля добавляются на лету так как создаются в админке
Кстати, а что мешает по итогам создания полей в админке сформировать статичный XML-файл для формы и потом уже его грузить стандартными средствами? С другой стороны есть метод getFieldsets, по идее можно получить нужный объект и уже к нему добавить поле.

p.s. Сорри, за некропост.
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Поскольку добавляется в одну таблицу и она жестко определена до написания формы к ней.
То я в своем случае сделал так:
Display = none всем элементам кроме первого
на изменение повесил AJAX который получает данные - какое поле зажечь inline и в какую позицию поставить (визуальной)
если поле надо переделать то формирую html-код всего что надо вставить в стандартный код т.е. <label...></label><input>(или select и тд)

Поля все уже определены в XML т.к. ничего другого в таблицу и не вставишь, конечно кроме чего-нибудь вроде массива params с динамическим набором данных, но мне было достаточно этого.
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Спустя 6 лет потребовалась подобная задача. Попробовал, вариант приведенный здесь хорошо.
Но у меня непонимание внутри getForm. В этой функции мне надо получить данные (какие же все-таки поля создавать).

Подскажите как можно внутри getForm получить данные (желательно $item от getItem)?
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Получилось вытащить через
Код
$item_id = $this->state->get('item.id'); //Получили id элемента

Если неправильно подскажите - буду благодарен.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться