Чтобы добавить модули в пункт выпадающего меню, нужно иметь в пункте меню некое поле, значение которого бы указывало на то, какие брать модули.
Для простоты будем использовать уже имеющееся поле - css-класс ссылки пункта меню. А для выбора модулей для данного пункта меню будем использовать позицию модулей с одноименным названием, то есть имя позиции это css-класс ссылки пункта меню.
Создадим переопределение вывода модуля меню и добавим следующий код, примерно с 71 строки файла default.php
$modulsFromPosition = $fieldImagesFolder = $jdvTools->getPosition($item->anchor_css, 0, 'array');
$countModuls = count($modulsFromPosition);
if ($countModuls == 1) $liWidth = '';
if ($countModuls == 2) $liWidth = 'li-width400';
if ($countModuls == 3) $liWidth = 'li-width600';
if ($countModuls == 4) $liWidth = 'li-width800';
if ($countModuls == 5) $liWidth = 'li-width800';
if ($countModuls == 6) $liWidth = 'li-width800';
if ($countModuls > 6) $liWidth = 'li-width800';
if (!empty($modulsFromPosition)) $class .= ' li-mbs ' . $liWidth;
echo '<li class="' . $class . '">';
switch ($item->type) :
case 'separator':
case 'component':
case 'heading':
case 'url':
if (empty($modulsFromPosition)){
require JModuleHelper::getLayoutPath('mod_menu', 'default_' . $item->type);
}else{
if ($countModuls == 1) $span = 'span12';
if ($countModuls == 2) $span = 'span6';
if ($countModuls == 3) $span = 'span4';
if ($countModuls == 4) $span = 'span3';
if ($countModuls == 5) $span = 'span2';
if ($countModuls == 6) $span = 'span2';
if ($countModuls > 6) $span = 'span1';
echo '<div class="row-fluid">';
foreach ($modulsFromPosition as $key=>$renderModule)
{
echo '<div class="'.$span.'">';
echo $renderModule;
echo '</div>';
}
echo '</div>';
}
break;
default:
require JModuleHelper::getLayoutPath('mod_menu', 'default_url');
break;
endswitch;
где
$jdvTools->getPosition($item->anchor_css, 0, 'array')
это
public function getPosition($position, $style = 0, $type = 'html'){
$document = JFactory::getDocument();
$renderer = $document->loadRenderer('module');
$modules = JModuleHelper::getModules($position);
$style = 0;
$params = array('style' => $style);
if ($type == 'html'){
ob_start();
foreach ($modules as $key=>$module)
{
echo $renderer->render($module, $params);
}
$html = ob_get_clean();
}else{
foreach ($modules as $key=>$module)
{
ob_start();
echo $renderer->render($module, $params);
$html[$key] = ob_get_clean();
}
}
return $html;
}