В Joomla есть один косяк, при включеном стандартном SEF могут не отображаться картинки вставленные в материал через визуальные редакторы. Не стоит паниковать, решение этой проблеме существует.

Стоит сказать, я сам столкнулся с этой проблемой и был обезкуражен. Началось все с того, что я включил кеширование на сайте и первое, что я увидел — разъехался шаблон. Весь текст был на белом фоне. Сразу в голову пришло, что не подключились стили css. Открыл исходник страницы и понял, что не хватает начального слеша в путях к css. Поставил слеш в шаблоне и успокоился, но не тут то было. Позже выяснилось, что не показываются еще и картинки.

Тут я начал мудрить с визуальным редактором, в настройках прописывать путь к файлам со слешем в начале, это все конечно сработает, но есть универсальный вариант, устраняющий сам корень проблемы.

Проблема кроется в ядре Joomla, а точнее в использовании ею тэга base.

 

Элемент base определен внутри контейнера head и инструктирует браузер относительно полного базового адреса текущего документа. Тег base предназначен для документов, в которых используется относительный адрес и эти документы могут переноситься в другую папку или даже на другой компьютер без потери связи. Браузер ищет тег base, определяет полный адрес документа и корректно загружает его. Например, если адрес документа указан как base href="http://www.amiseo.ru/joomla", то при добавлении рисунков достаточно использовать относительный адрес img src="/images/joomla.png". При этом полный путь к изображению будет http://www.amiseo.ru/joomla/images/joomla.png, что позволяет браузеру всегда находить графический файл, независимо от того, где находится текущая веб-страница
 
 

Так вот по умолчанию Joomla на каждую страницу сует тэг base в котором стоит адрес данной страницы и все картинки имеют относительный путь от этой страницы, но мы то картинки храним в папке images в корне сайта!

Если вы используете сторонной SEF типа AceSEF то там эта проблема решена, а всем остальным нужно проделать следующее:

Открываем уже знакомый нам файл на сервере libraries/joomla/document/html/renderer/head.php находим в нем строку

 

$strHtml .= $tab.'<base href="'.$document->getBase().'"></base>'.$lnEnd;

или

$buffer .= $tab . '<base href="' . $document->getBase() . '" />' . $lnEnd; 

Ориентировочно это 66 строка файла. И заменяем $document->getbase() на JURI::base()

Сохраняем и заливаем файл назад на сервер.

Всё, проблема решена!

 

Update: Решив одну проблему, как оказалось, можно приобрести другую. При данных манипуляциях перестают работать якоря. Если вы не знаете что это или они вам не нужны, то дальнейшее вас не касается.

Суть в том, что якорь прописанный на странице как #top начинает ссылаться на главную страницу, независимо от того, на какой странице он проставлен. Виноват в этом именно злополучный тэг base. Поэтому для себя я вообще выкинул кусок кода, относящийся к base из head.php. Теперь нужно быть внимательным при обновлениях Joomla.

www.amiseo.ru