Новости 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 можно из объекта приложения

<?php protected function doExecute(InputInterface $input, OutputInterface $output): int { //... $live_site = $this->getApplication()->get('live_site'); //... }

и исходя из этого строить дальнейшую логику.

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

aleks_yug

  • Давно я тут
  • 628
  • 83 / 0
Здравствуйте!

Возникла не совсем тривиальная задачка: передать в тему письма администратору сайта о сделанном заказе в VirtueMart 3.4.2 еще одно дополнительное значение. В данном случае - значение поля extra_field_4, в котором выводятся склады (в которых формируется заказ).
В письме значение этого поля выводится в адресе доставки, наряду со всеми остальными данными. Но передать его в тему письма никак не удается!

Если я правильно понимаю, за формирование темы отвечает код в файле /components/com_virtuemart/views/invoice/view.html:

if ($this->doVendor) {
  $this->subject = vmText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_VENDOR_'.$orderDetails['details']['BT']->order_status, $this->shopperName, strip_tags($this->currencyV->priceDisplay($orderDetails['details']['BT']->order_total)),

$orderDetails['details']['BT']->order_number);
  $recipient = 'vendor';
}


У меня этот код на 312 строке.

Все данные, которые формируются в этом коде, берутся из ланг-файла ru-RU.com_virtuemart.ini:
COM_VIRTUEMART_MAIL_SUBJ_VENDOR_U="[%3$s], Товаров размещено %1$s, всего %2$s"
Добавить сюда еще что-либо никак не получается, или хотя бы заменить значение "%2$s" (общая сумма заказа) на нужное мне значение поля extra_field_4
На картинке постарался визуально пояснить то, что нужно получить в результате.

К сожалению, поиск на форуме не помог. Возможно, кто-то уже сталкивался с такой необходимостью.
Буду очень благодарен за помощь, в том числе и возмездную!
*

icom

  • Давно я тут
  • 830
  • 202 / 4
Код
$this->subject = vmText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_VENDOR_'.$orderDetails['details']['BT']->order_status, $this->shopperName, strip_tags($this->currencyV->priceDisplay($orderDetails['details']['BT']->order_total)), $orderDetails['details']['BT']->order_number);
поменять на
Код
$this->subject = vmText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_VENDOR_'.$orderDetails['details']['BT']->order_status, $this->shopperName, strip_tags($this->currencyV->priceDisplay($orderDetails['details']['BT']->order_total)), $orderDetails['details']['BT']->order_number,$orderDetails['details']['BT']->extra_field_4);

COM_VIRTUEMART_MAIL_SUBJ_VENDOR_U="[%3$s], Товаров размещено %1$s, всего %2$s"
на
COM_VIRTUEMART_MAIL_SUBJ_VENDOR_U="[%3$s], Товаров размещено %1$s, всего %2$s, %4$s"

или чтоб не трогать языковые константы
Код
$this->subject = vmText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_VENDOR_'.$orderDetails['details']['BT']->order_status, $this->shopperName, strip_tags($this->currencyV->priceDisplay($orderDetails['details']['BT']->order_total)), $orderDetails['details']['BT']->order_number).', '.$orderDetails['details']['BT']->extra_field_4;
« Последнее редактирование: 31.08.2019, 15:32:26 от icom »
*

aleks_yug

  • Давно я тут
  • 628
  • 83 / 0
Спасибо за помощь!
Подставил оба варианта - с правкой констант и без.
В первом случае в теме отображается только: Тема, т.е. выключается все. кроме запятой.
Во втором (без правки языковых констант) - [3UMD06], Товаров размещено  Светлана Митичкина, всего 45,00 руб,

Т.е. значение extra_field_4 не попадает сюда ни в одном из вариантов.
Думаю дальше... Должен же быть вариант!
*

icom

  • Давно я тут
  • 830
  • 202 / 4
$orderDetails['details']['BT']->extra_field_4;
на
$orderDetails['details']['ST']->extra_field_4;
*

aleks_yug

  • Давно я тут
  • 628
  • 83 / 0
ST
Нет, к сожалению, тот же результат в обоих вариантах. Тут что-то другое...
*

icom

  • Давно я тут
  • 830
  • 202 / 4
die(print_r($orderDetails)); там есть extra_field_4 ?
*

aleks_yug

  • Давно я тут
  • 628
  • 83 / 0
print_r
В этом же файле? print_r здесь вообще отсутствует. Может быть отличаются версии VM? которые у нас (3.4.2)
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
В этом же файле? print_r здесь вообще отсутствует
Так Вы узнаете что есть в данных . Я использую var_dump
*

aleks_yug

  • Давно я тут
  • 628
  • 83 / 0
Сделать пришлось немного по-иному, но работает.

Удаляем или комментируем:
$this->subject = vmText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_VENDOR_'.$orderDetails['details']['BT']->order_status, $this->shopperName, strip_tags($this->currencyV->priceDisplay($orderDetails['details']['BT']->order_total)), $orderDetails['details']['BT']->order_number);
$recipient = 'vendor';


Заменяем на:

foreach ($this->shipmentfields['fields'] as $field) {
 if (!empty($field['value'])) {
 $this->subject = vmText::_('COM_VIRTUEMART_ZAKAZ_MAIL_ADM'). '' .$field['value']. '' .vmText::_('COM_VIRTUEMART_ZAKAZ_MAIL_CLIENT_NAME'). '' .$this->shopperName. '' .vmText::_('COM_VIRTUEMART_N_ZAKAZ_MAIL'). '' .$orderDetails['details']['BT']->order_number;
 $recipient = 'vendor';
 }
}


Добавляем несколько языковых переменных ланг-файл VM:

COM_VIRTUEMART_ZAKAZ_MAIL_ADM="Получен заказ на склад: "
COM_VIRTUEMART_ZAKAZ_MAIL_CLIENT_NAME=". Покупатель: "
COM_VIRTUEMART_N_ZAKAZ_MAIL=". № заказа: "


Или что-то на ваш вкус...

В результате получаем тему письма администратору магазина в таком виде:
Получен заказ на склад: магазин такой-то, на ул. какой-то 95/1. Покупатель: Пупкинд Вася. № заказа: J48F030

Вид темы письма самому покупателю остается без изменения.
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
Я решал аналогичный вопрос так:
(но зависимость была - от способа доставки, можно переделать)

Тот же файл, что упомянули - view.html.php:

Вместо:
Код
$this->subject = vmText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_VENDOR_'.$orderDetails['details']['BT']->order_status, $this->shopperName, strip_tags($this->currencyV->priceDisplay($orderDetails['details']['BT']->order_total)), $orderDetails['details']['BT']->order_number);

Написал:
Код
                $subj_prefix = '';
                switch((int) $orderDetails['details']['BT']->virtuemart_shipmentmethod_id) {
                    case 1:
                    case 2:
                        $subj_prefix = 'Кашириных: ';
                        break;
                    case 4:
                        $subj_prefix = '15у: ';
                        break;
                    case 5:
                        $subj_prefix = 'СДМ: ';
                        break;
                }
                if (!empty($orderDetails['details']['BT']->coupon_code)) {
                    $subj_prefix .= 'ПРОМОКОД '.$orderDetails['details']['BT']->coupon_code.' ';
                }               

                $this->subject = $subj_prefix . vmText::sprintf('COM_VIRTUEMART_MAIL_SUBJ_VENDOR_'.$orderDetails['details']['BT']->order_status, $this->shopperName, strip_tags($this->currencyV->priceDisplay($orderDetails['details']['BT']->order_total)), $orderDetails['details']['BT']->order_number);
Возможно, будет интересно: Интеграция с Ozon
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Отправка уведомления о заказе на несколько адресов

Автор sept

Ответов: 5
Просмотров: 6338
Последний ответ 17.08.2018, 16:48:42
от Akeksandr
Неопубликованный товар доступен по ссылке из письма

Автор antony2606

Ответов: 3
Просмотров: 928
Последний ответ 18.01.2018, 13:42:13
от antony2606
Как передать значение настраиваемого поля в корзину?

Автор 1AZ1

Ответов: 3
Просмотров: 1141
Последний ответ 27.08.2017, 18:47:05
от Liss
Добавление постраничной навигации к списку подкатегорий

Автор usmdamir

Ответов: 3
Просмотров: 888
Последний ответ 26.04.2017, 18:49:11
от Strikerus
E-mail администратору о заказе отстутствующего товара

Автор SolopoV

Ответов: 2
Просмотров: 984
Последний ответ 08.01.2017, 16:13:52
от SolopoV