Проблема с JFactory :: getDocument (), когда модуль помещается в {loadposition}

Я застрял. Я кодирую простой модуль, который будет размещен /видим только на страницах статей com_content . Этот модуль извлекает ключевые слова из текущей статьи, а во избежание использования дополнительного запроса к базе данных я использую JDocument /getMetaData:

$item = JFactory::getDocument();
$item_keywords = $item->getMetaData('keywords');

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

architecture, design studio, house

Но когда я вставлял модуль в содержимое статьи через плагин {loadposition} , я узнал, что модуль не может извлекать ключевые слова из текущей статьи с помощью JDocument /getMetaData.

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

Возможно, я добавлю код, который проверяет, как модуль загружается . Мой код:

$item = JFactory::getDocument();
if ($item->template) {
    echo "standart module load - use getMetaData";
} else {
    echo "module loaded by plugin - create an additional query";
}

У вас есть идея?

2 голоса | спросил Beshur 15 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 15 Sep 2015 19:06:32 +0300 2015, 19:06:32

2 ответа


1

Вы не можете использовать стандартный контентный плагин Joomla {loadposition} для этой цели, потому что подготовка контента происходит намного раньше подготовки данных главы.

Вам нужно будет написать свой собственный плагин Joomla System для замены, например плагин Module Anywhere от NoNumber, который заменяет код mos модулем после подготовки данных о головке. Чтобы узнать больше, обратитесь к списку событий плагина Joomla: https://docs.joomla.org/Plugin/Events

ответил Abhishek 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 18 Sep 2015 06:19:08 +0300 2015, 06:19:08
0

Вероятно, проще всего получить ключевые слова вручную с помощью sql из вашего модуля. Что-то вроде (если view = article):

$app=JFactory::getApplication(); 
$id = $app->input->getInt('id', 0); 
$db=JFactory::getDbo(); 
$db->setQuery("select metakey from #__content where id={$id}");
$keywords=$db->loadResult(); 
ответил jonasfh 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 18 Sep 2015 14:08:53 +0300 2015, 14:08:53

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132