После обновления плагина редактора для материалов JCKEditor (JoomlaCK Editor), спустя некоторое время столкнулся с неприятной неожиданностью. Лента RSS Feed перестала отдаваться сайтом, вместо этого показывая белый экран.

Включение ошибок показало фатальную ошибку:

Call to undefined method JDocumentFeed::getHeadData() in /plugins/system/jcktypography/jcktypography.php on line 69

Открыв упомянутый файл по адресу /plugins/system/jcktypography/jcktypography.php обнаружил следующий код:

            $data = $doc->getHeadData();

Для объективности расследования проблемы, предлагаю взглянуть не только на эту строку, а на весь код в целом:

            $doc = JFactory::getDocument();
            $data = $doc->getHeadData();
            $stylesheet = array();
            $url = JURI::base(true).'/plugins/editors/jckeditor/typography/typography2.php';
            $stylesheet[$url]['mime'] = 'text/css';
            $stylesheet[$url]['media'] = null;
            $stylesheet[$url]['attribs'] = array();
            $data['styleSheets'] = $stylesheet + $data['styleSheets'];
            $doc->setHeadData($data);       

Что мы видим: в переменную $doc передается ссылка на текущее представление объекта Document (и если бы это была обычная страница, то там бы у нас оказался объект DocumentHTML, у которого есть метод getHeadData(), но поскольку у нас там лента новостей, то Joomla работает с объектом DocumentFeed, который методы getHeadData() и setHeadData() не имеет.

Наиболее логичным решением в данном случае будет, заменить упомянутую в начале статьи строку на:

if (method_exists($doc, 'getHeadData')) $data = $doc->getHeadData();

Но тогда у нас проблема решится ровно наполовину, и что делать с последующим кодом, ведь метод setHeadData в данном случае тоже неизбежно выдаст ошибку?

Поэтому предлагаю заменить весь большой кусок на код:

        $doc = JFactory::getDocument();
        if (method_exists($doc, 'getHeadData')) {
            $data = $doc->getHeadData();
            $stylesheet = array();
            $url = JURI::base(true).'/plugins/editors/jckeditor/typography/typography2.php';
            $stylesheet[$url]['mime'] = 'text/css';
            $stylesheet[$url]['media'] = null;
            $stylesheet[$url]['attribs'] = array();
            $data['styleSheets'] = $stylesheet + $data['styleSheets'];
            $doc->setHeadData($data);
        }

Успехов!

Add comment


Security code
Refresh