AmiSEO Joomla Хитрости Решение проблемы «не отображаются картинки»
Печать PDF

Решение проблемы «не отображаются картинки»

+ 25
+ 4

В 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;

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

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

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

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

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

Комментарии 

 
0 #30 kabban 11.01.2017 10:15
Спасибо, помогло решить проблему.
Цитировать
 
 
0 #29 Гость 30.11.2016 17:39
:lol: Спасибо! всю голову переломал)))
Цитировать
 
 
+1 #28 Olexa 12.05.2015 20:01
Спасибо! Artio joomsef 4.6.2 joomla 3 сломал все картинки, решение супер
Цитировать
 
 
+1 #27 Олег 06.05.2015 00:22
Огромное огромное спасибо
Цитировать
 
 
+1 #26 Serg 01.12.2014 19:43
огромное спасибо! 2 дня голову ломал, а тут дело 2 секунд
Цитировать
 
 
+1 #25 Вадим 09.10.2014 21:36
Огромное спасибо!!!
Цитировать
 
 
+1 #24 muss 04.10.2014 04:38
спасибо огромное)решил проблему)
Цитировать
 
 
0 #23 Slava 01.11.2013 01:54
Отлично!!! именно эта статья помогла решить непонятную проблему!
Цитировать
 
 
-1 #22 Ilya 09.09.2013 21:20
не отображался background при включённом SEF, в материалах расположенных в подменю .
часа три искал решение... нашёл здесь!
благодарность автору)))
Цитировать
 
 
+2 #21 Илья 21.06.2013 12:08
Чувак, тебе настоящий человеческий респ! ;-)
Заменяем $document->getbase() на JURI::base()
Реально работает, спасибо!
Цитировать