Случай, когда проще сделать самому, чем рассказать как.
Если бы автору нужно было, чтобы сделали за него, он написал бы в
коммерческий раздел. Тут сам что-то пытается сделать, что похвально. Будем дальше помогать. Щас подробно распишу, как и что работает, чтобы не было больше вопросов с путями и именами файлов.
Стандартный пункт меню выводит только заголово+ссылка+картинка. Нам же нужен модуль. Модуль можно вывести вручную в любом файле Joomla, знать бы его тайтл и имя (например, «Моя голосовалка» и «mod_poll»). Под именем в Joomla подразумевается тип модуля. Технически можно тупо забивать это в любое неиспользуемое поле пункта меню, но это не совсем удобно, поэтому я сделал альтернативный шаблону пункта меню.
Он делается «на основе» шаблона пункта меню к любому компоненту. Я взял com_wrapper потому-что это а) логичнее всего и б) там минимум кода
/html/com_wrapper/wrapper/module.php
/html/com_wrapper/wrapper/module.xml
Здесь слово module я придумал. php-ный файл вообще не учавствует у нас в работе, он нужен только для того, чтобы подтянулся альт.шаблон пункта меню
module.xml — это основа наша:
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<layout title="Модуль (Выводит один модуль)" <!--этот заголовок будет отображаться при создании нового пункта меню как его тип-->
option="TPL_TPLNAME_SOME_OPTION">
<help key = "" />
<message></message>
</layout>
<fields name="request">
<fieldset name="request">
<field name="title" type="sql" <!--есть такой замечательный тип поля в Joomla, который редко используют, запрос к БД-->
default=""
label="Выберите модуль"
<!--Ниже сам запрос: выбираем заголовок и имя модуля и записываем как одно значение разделив символом «|»-->
query="SELECT title, CONCAT(title,'|',module) AS value FROM #__modules WHERE published=1 AND client_id=0"
/>
</fieldset>
</fields>
</metadata>
Теперь у нас пункт меню «хранит» тайтл и тип модуля в себе! Осталось сам модуль вывести. Так как com_wrapper это компонент, то берём подшаблон меню default_component.php и переписываем:
<?php defined('_JEXEC') or die;
if ($item->query["title"]) { //если в объекте есть query["title"], значит нужно выводить модуль
$params = explode("|", $item->query["title"]); //разбили на два параметра
jimport('joomla.application.module.helper'); //подключили рендерер
$module = JModuleHelper::getModule($params[1], $params[0]); //получили модуль по заголовку и имени
echo JModuleHelper::renderModule($module); //вывели модуль. Это всё
} else { //Иначе всё как обычно. Код ниже (кроме последней строки с «}» стандартный)
if ($item->menu_image) {
$item->style = 'style="background:url('.$item->menu_image.') 0 0 no-repeat;"';
$item->img = '<img src="'.$item->menu_image.'" alt="'.$item->title.'" />';
}
?>
<a href="<?php echo $item->flink;?>"><?php echo $item->img; ?><?php echo $item->title; ?></a><span> </span>
<?php } ?>