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

stillwillbe

  • Новичок
  • 5
  • 0 / 0
Добрый день всем знатокам.
Есть сайт на шаблоне Protostar. В меню присутствуют пункты с выпадающими ссылочными пунктами, причем сам родитель тоже имеет свою ссылку. На десктопной версии работает по наведению и по клику - все красиво. На мобильной версии, естественно, к подпунктам не добраться, т.к срабатывает ссылка родительского элемента. Вопрос: как решить данную проблему? Отдельного меню для мобильной версии в protostare нет. Заменить ссылку на #? Как? Не закрывать выпадающее меню по времени? Как? Спасибо всем, кто откликнется.
« Последнее редактирование: 10.05.2021, 21:55:24 от stillwillbe »
*

xpank

  • Захожу иногда
  • 448
  • 41 / 0
Как вариант.
Дублировать в шаблоне позицию с меню и переименовать. Настроить отображение каждой из этих двух позиций в зависимости от версии сайта. Опубликовать меню оптимизированное под мобильные устройства в новой позиции.
*

stillwillbe

  • Новичок
  • 5
  • 0 / 0
Ну, в этом есть резон. Только позволит ли protostar добавить позицию - надо глянуть.
Однозначно, спасибо за идею.
*

xpank

  • Захожу иногда
  • 448
  • 41 / 0
Цитировать
Только позволит ли protostar добавить позицию - надо глянуть.
Позволит, но сам protostar может быть затерт при обновлении. Лучше клонировать шаблон с новым именем и редактировать уже его под себя.
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Позволит, но сам protostar может быть затерт при обновлении.
100% - затрет при обновлении - Клонировать это не сложно - Конечно же - это правильно !
*

stillwillbe

  • Новичок
  • 5
  • 0 / 0
Сам шаблон переименован. Но, если честно, не представляю, как конкретно указать, чтобы при разрешении экрана таком-то брался для меню модуль такой-то....
Код в index.php такой:
<?php if ($this->countModules('position-1')) : ?>
                                <nav class="navigation" role="navigation">
                                    <div class="navbar pull-left">
                                        <a class="btn btn-navbar collapsed" data-toggle="collapse"
                                           data-target=".nav-collapse">
                                            <span class="element-invisible"><?php echo JTEXT::_('TPL_PROTOSTAR_TOGGLE_MENU'); ?></span>
                                            <span class="icon-bar"></span>
                                            <span class="icon-bar"></span>
                                            <span class="icon-bar"></span>
                                        </a>
                                    </div>
                                    <div class="nav-collapse">
                                        <jdoc:include type="modules" name="position-1" style="none"/>
                                    </div>
                                </nav>
                            <?php endif; ?>
Позиция 1 для меню в протостаре
« Последнее редактирование: 09.05.2021, 11:19:27 от stillwillbe »
*

xpank

  • Захожу иногда
  • 448
  • 41 / 0
Добавить нужные CSS классы. например nav-pc и nav-mobi. Ну и стилями через @media скрывать и показывать эти классы - display:none, display:block.
*

v42bis

  • Захожу иногда
  • 133
  • 13 / 1
Вариант без дублирования модулей, позиций и дополнительных пунктов меню

Копируем содержимое modules/mod_menu/tmpl/ в templates/ВАШ_ШАБЛОН/html/mod_menu чтобы можно было кастомизировать шаблон модуля и не зависеть от случайного "затирания" при обновлении.

В файле templates/protostar/html/mod_menu/default.php ищем фрагмент кода
Код
// The next item is deeper.
if ($item->deeper)
{
echo '<ul class="nav-child unstyled small">';
}
   
==> echo '<ul class="nav-child unstyled small">';
// это открывающий тег ul для каждого нового дочернего списка

Изменяем, например, на echo '<i class="subMenuToggler">▼</i><ul class="nav-child unstyled small">';
И рядом с пунктом меню, который имеет вложение (дочерние элементы) будет выводиться стрелочка.

клику на элемент открываем/скрываем дочерний список.
Код
jQuery(document).ready(function(){
jQuery('.subMenuToggler').on('click', function(){
jQuery(this).next().toggle();
});
});

Добавляем соль/сахар по вкусу дописываем CSS
*

stillwillbe

  • Новичок
  • 5
  • 0 / 0
Спасибо большое! Будем разбираться!
*

stillwillbe

  • Новичок
  • 5
  • 0 / 0
У меня стоит такой код:
if ($item->deeper)
   {
      $class .= ' deeper';
   }
*

fbr

  • Завсегдатай
  • 1663
  • 206 / 7
У меня стоит такой код:
if ($item->deeper)
   {
      $class .= ' deeper';
   }
смотрите внимательно до конца страницы
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Версии РНР и Joomla 3

Автор Ebelous

Ответов: 8
Просмотров: 2937
Последний ответ 27.01.2025, 20:38:45
от pavelrer
Исчез компонент 'Поля' из меню в админке

Автор goga_pgasovav

Ответов: 2
Просмотров: 1319
Последний ответ 23.12.2024, 22:31:21
от goga_pgasovav
Не могу обновить Joomla 2.5.28 до 3 или 4 версии

Автор esparce

Ответов: 1
Просмотров: 1182
Последний ответ 19.09.2023, 07:55:40
от Vastriet
Некоторые плагины и темы не работают на другой версии php

Автор max.slanskii

Ответов: 1
Просмотров: 900
Последний ответ 28.07.2023, 00:11:47
от sivers
После обновления до Joomla 3.7 в админке в меню "Компоненты" пропали пункты

Автор lolitma3

Ответов: 39
Просмотров: 13154
Последний ответ 15.06.2023, 11:55:16
от Victor333