Новости Joomla

Quantum Manager нужен сообществу, а автору нужна ваша поддержка!

Quantum Manager нужен сообществу, а автору нужна ваша поддержка!Файловый менеджер Quantum — одно...

Файловый менеджер Quantum — одно из самых популярных решений для Joomla, созданное разработчиком из сообщества Joomla, Дмитрием Цымбалом (@tsymbalmitia). Он делает Quantum удобным, безопасным и современным, обновляет его, исправляет уязвимости и отвечает пользователям — всё это в свободное от основной работы время.

Теперь настал момент для следующего шага: развитие проекта требует больше времени и ресурсов.

0 Пользователей и 1 Гость просматривают эту тему.
  • 19 Ответов
  • 4395 Просмотров
*

Nuta

  • Захожу иногда
  • 59
  • 2 / 0
Код
Главное меню 
  Пункт 1
  -- Подпункт 11
  -- Подпункт 12

  Пункт 2
  -- Подпункт 21
  -- Подпункт 22

  Пункт 3
  -- Подпункт 31
  -- Подпункт 32

Вывод второго уровня Главного меню в модуле на страницах Пункта 1
   
Код
   -- Подпункт 11
   -- Подпункт 12

Вывод второго уровня Главного меню в модуле на страницах Пункта 2
   
Код
   -- Подпункт 21
   -- Подпункт 22

А вопрос в том, как названию модуля на страницах присвоить название текущего пункта меню 1 уровня.
*

ELLE

  • Глобальный модератор
  • 4505
  • 893 / 0
а нельзя создать просто 3 модуля - назвать их по названию пунктов меню первого уровня и выводить только на соответствующих страницах второго уровня?
или в принципе модуль должен быть один, который называется "главное меню" и у него должен меняться заголовок, в зависимости от того, где сейчас находимся........?
*

Nuta

  • Захожу иногда
  • 59
  • 2 / 0
Именно так, модуль должен быть один.
Над первым предложением я думала, но у меня не три пункта главного меню, а больше. Зачем дублировать большое количество одинаковых модулей?
*

ELLE

  • Глобальный модератор
  • 4505
  • 893 / 0
ну. тогда только скриптом могу предложить...подменять заголовки и все

м\б можно через переопределение modules.php как-то решить. вообще задача нестандартная
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
в папке HTML  вашего шаблона файл modules.php (нет скопируйте из шаблона system)
вставляете код
Код: php-brief
function modChrome_menu($module, &$params, &$attribs)
{
    @$menutitle = JMenuSite::getInstance('site')->getActive()->title;
    if (!empty ($module->content)) : ?>
        <div class="moduletable<?php echo htmlspecialchars($params->get('moduleclass_sfx')); ?>">
<?php if ((bool) $module->showtitle) : ?>
            <h3><?php echo ($menutitle ? $menutitle: $module->title); ?></h3>
        <?php endif; ?>
            <?php echo $module->content; ?>
</div>
    <?php endif;
}
соответственно модуль в шаблоне должен выводится так:
<jdoc:include type="modules" name="youname" style="menu" />
*

Nuta

  • Захожу иногда
  • 59
  • 2 / 0
Спасибо!
А не подскажете, как сделать такое подключение для WARP Framework?
там модули в шаблоне подключаются по-другому.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
*

Nuta

  • Захожу иногда
  • 59
  • 2 / 0
Спасибо, Федор!
Я так и сделала.
Я нашла этот файл и внесла предложенные изменения. Файл был в папке /system. Скопировала измененный  в свой  шаблон в папку /html. После копирования вместо страниц, где должен был отображаться модуль, - белый экран.
Хотела внести также изменения (<jdoc:include type="modules" name="youname" style="menu" />) в template.php.
В WARP есть папка layouts, в которой лежит template.php и module.php. В template.php есть строки вида <?php echo $this['modules']->render('toolbar-l'); ?> для подключения модулей в указанной позиции. В шаблоне нет подключения модулей типа jdoc:include type... У меня Joomla 3.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
В шаблоне system файл modules.php идет по умолчанию. И у вас уже определенный прогресс. Если белый экран стал значит система реагирует на ваш новый файл. Включите в общих настройках сайта отображение ошибок для разработчиков. Внимательно просмотрите ваш код и правки. Да и гляньте функцию render, не может быть, что не реализован вызов стилей к примеру так (может быть совсем по другому)
Код: php-brief
<?php echo $this['modules']->render('toolbar-l', 'mystile'); ?> 
*

Nuta

  • Захожу иногда
  • 59
  • 2 / 0
Да, подключение модулей в шаблоне идет именно так:
Код
<?php echo $this['modules']->render('toolbar-l'); ?>

Я просто не могу понять, как указать мой стиль модуля при таком подключении.


При отладке системы ошибка следующая:
Код
Fatal error: Cannot redeclare modChrome_none() (previously declared in /.../templates/system/html/modules.php:15) in /.../templates/reinfo/html/modules.php on line 18

*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
эта ошибка говорит что вы пытаетесь повторно объявить функцию modChrome_none
что нужно сделать найти файл modules.php где он лежит. не шаблона system и делать в нем правки. Вы его не нашли.
*

Nuta

  • Захожу иногда
  • 59
  • 2 / 0
Спасибо, Федор!
Я, конечно, поищу еще, но ... Есть еще modules.php в templates/reinfo/warp/systems/joomla/layouts и в templates/reinfo/warp/systems/joomla/helpers
Но это совсем не то. Там никакие функции не объявляются. 
Вот жеж какая нетривиальная задача с этим Warp-oм получается! Вот в 1.5 без фреймворка ваше решение работает.
*

Nuta

  • Захожу иногда
  • 59
  • 2 / 0
Федор, ну раз уж вы включились в решение моей задачи, наберусь наглости и попрошу у вас консультации.
Вот файл из директории templates/template_name/warp/systems/joomla/layouts/modules.php
Код
<?php


// load modules
$modules = $this['modules']->load($position);
$count   = count($modules);
$output  = array();

foreach ($modules as $index => $module) {

// set module params
$params           = array();
$params['count']  = $count;
$params['order']  = $index + 1;
$params['first']  = $params['order'] == 1;
$params['last']   = $params['order'] == $count;
$params['suffix'] = $module->parameter->get('moduleclass_sfx', '');

// pass through menu params
if (isset($menu)) {
$params['menu'] = $menu;
}

// get class suffix params
$parts = preg_split('/[\s]+/', $params['suffix']);

foreach ($parts as $part) {
if (strpos($part, '-')!== false) {
list($name, $value) = explode('-', $part, 2);
$params[$name] = $value;
}
}

// remove used parameters from suffix so we dont end up having the wrong css-classes
$params['suffix'] = trim(preg_replace("/(style|color|badge|icon|header)-[a-z0-9]+/", "", $params['suffix']));

// render module
$output[] = $this->render('module', compact('module', 'params'));
}

// render module layout
echo (isset($layout) && $layout)? $this->render("modules/layouts/{$layout}", array('modules' => $output)) : implode("\n", $output);

И вот файл module.php из директории templates/template_name/layouts/module.php
Код
<?php

// init vars
$id = $module->id;
$position = $module->position;
$title = $module->title;
$showtitle = $module->showtitle;
$content = $module->content;
$split_color = '';
$subtitle = '';
$title_template = '';

// init params
foreach (array('suffix', 'style', 'color', 'badge', 'icon', 'dropdownwidth') as $var) {
$$var = isset($params[$var])? $params[$var] : null;
}

// set default module types
if ($style == '') {
if ($module->position == 'top-a') $style = 'box';
if ($module->position == 'top-b') $style = 'box';
if ($module->position == 'bottom-a') $style = 'box';
if ($module->position == 'bottom-b') $style = 'box';
if ($module->position == 'innertop') $style = 'box';
if ($module->position == 'innerbottom') $style = 'box';
if ($module->position == 'sidebar-a') $style = 'box';
if ($module->position == 'sidebar-b') $style = 'box';
}

// test module styles here
//$style = '';
//$color = '';
//$badge = '';
//$icon = '';
//$title = '';
//$content = '<ul class="line"><li>This is a demo text.</li><li><a href="#">Link</a></li></ul><ul class="zebra"><li>This is a demo text.</li><li><a href="#">Link</a></li></ul><a class="button-default" href="#">Read More</a><ul class="check"><li>Check List</li></ul><em>em Element</em><br /><em class="box">em with class box</em><br /><code>code Element</code><form class="short style"><div><input type="text"></div><div><textarea >Textarea text</textarea></div><div><button type="submit" name="Submit">Log in</button></div></form>';

// force module style
if (in_array($module->position, array('absolute', 'breadcrumbs', 'logo', 'banner', 'search', 'debug'))) {
$style = 'raw';
$showtitle = 0;
}
if (in_array($module->position, array('headerbar', 'toolbar-r' ,'toolbar-l', 'footer'))) {
$style = '';
$showtitle = 0;
}
if ($module->position == 'menu') {
$style = $module->menu ? 'raw' : 'dropdown';
}

// set module template using the style
switch ($style) {

case 'box':
$template = 'default-1';
$style = 'mod-'.$style;
$style .= ($color)? ' mod-box-'.$color : '';
$split_color = 1;
$subtitle = 1;
$title_template = '<h3 class="module-title">%s</h3>';
break;

case 'dropdown':
$template = 'dropdown';
$subtitle = 1;
break;

case 'raw':
$template = 'raw';
break;

default:
$template = 'default-1';
$style = $suffix;
$suffix         = '';
$title_template = '<h3 class="module-title">%s</h3>';
}

$style.=" ".$suffix;

// set badge if exists
if ($badge) {
$badge = '<div class="badge badge-'.$badge.'"></div>';
}

// split title in two colors
if ($split_color) {
$pos = mb_strpos($title, ' ');
if ($pos !== false) {
$title = '<span class="color">'.mb_substr($title, 0, $pos).'</span>'.mb_substr($title, $pos);
}
}

// create subtitle
if ($subtitle) {
$pos = mb_strpos($title, '||');
if ($pos !== false) {
$title = '<span class="title">'.mb_substr($title, 0, $pos).'</span><span class="subtitle">'.mb_substr($title, $pos + 2).'</span>';
}
}

// create title icon if exists
if ($icon) {
$title = '<span class="icon icon-'.$icon.'"></span>'.$title.'';
}

// create title template
if ($title_template) {
$title = sprintf($title_template, $title);
}

// set dropdownwidth if exists
if ($dropdownwidth) {
$dropdownwidth = 'style="width: '.$dropdownwidth.'px;"';
}

// render menu
if ($module->menu) {

// set menu renderer
if (isset($params['menu'])) {
$renderer = $params['menu'];
} else if (in_array($module->position, array('menu'))) {
$renderer = 'dropdown';
} else if (in_array($module->position, array('toolbar-l', 'toolbar-r', 'footer'))) {
$renderer = 'default';
} else {
$renderer = 'accordion';
}

// set menu style
if ($renderer == 'dropdown') {
$module->menu_style = 'menu-dropdown';
} else if ($renderer == 'accordion') {
$module->menu_style = 'menu-sidebar';
} else if ($renderer == 'default') {
$module->menu_style = 'menu-line';
} else {
$module->menu_style = null;
}

$content = $this['menu']->process($module, array_unique(array('pre', 'default', $renderer, 'post')));
}

// render module
echo $this->render("modules/templates/{$template}", compact('style', 'badge', 'showtitle', 'title', 'content', 'dropdownwidth'));

В папке templates/template_name/html нет modules.php

В какой из файлов вставить предложенный код? И там, наверное, другой синтаксис будет?

А вот часть template.php
Код
<!DOCTYPE HTML>
<html lang="<?php echo $this['config']->get('language'); ?>" dir="<?php echo $this['config']->get('direction'); ?>">

<head>
<?php echo $this['template']->render('head'); ?>
</head>

<body id="page" class="page <?php echo $this['config']->get('body_classes'); ?>" data-config='<?php echo $this['config']->get('body_config','{}'); ?>'>

<?php if ($this['modules']->count('absolute')) : ?>
<div id="absolute">
<?php echo $this['modules']->render('absolute'); ?>
</div>
<?php endif; ?>



<header id="header">
<div class="wrapper clearfix">
<?php if ($this['modules']->count('toolbar-l + toolbar-r') || $this['config']->get('date')) : ?>
<div id="toolbar" class="clearfix">

<?php if ($this['modules']->count('toolbar-l') || $this['config']->get('date')) : ?>
<div class="float-left">

<?php if ($this['config']->get('date')) : ?>
<time datetime="<?php echo $this['config']->get('datetime'); ?>"><?php echo $this['config']->get('actual_date'); ?></time>
<?php endif; ?>

<?php echo $this['modules']->render('toolbar-l'); ?>

</div>
<?php endif; ?>

<?php if ($this['modules']->count('toolbar-r')) : ?>
<div class="float-right"><?php echo $this['modules']->render('toolbar-r'); ?></div>
<?php endif; ?>

</div>
<?php endif; ?>

<?php if ($this['modules']->count('logo + headerbar')) : ?>
<div id="headerbar" class="clearfix">

<?php if ($this['modules']->count('logo')) : ?>
<div id="logo"><?php echo $this['modules']->render('logo'); ?></div>
<?php endif; ?>

<?php echo $this['modules']->render('headerbar'); ?>

</div>
<?php endif; ?>
Т.е. там тоже модули немного по-другому подключаются?
« Последнее редактирование: 22.08.2013, 00:17:27 от Nuta »
*

Nuta

  • Захожу иногда
  • 59
  • 2 / 0
Ну в общем я нашла и вставила предложенный кусок кода. Перестал выдавать ошибку.
Расположение файла: /templates/system/html/modules.php

Код
<?php


defined('_JEXEC') or die;

/*
 * none (output raw module content)
 */
function modChrome_none($module, &$params, &$attribs)
{
echo $module->content;
}

/*
 * html5 (chosen html5 tag and font headder tags)
 */
function modChrome_html5($module, &$params, &$attribs)
{
$moduleTag      = $params->get('module_tag', 'div');
$headerTag      = htmlspecialchars($params->get('header_tag', 'h3'));
$bootstrapSize  = (int) $params->get('bootstrap_size', 0);
$moduleClass    = $bootstrapSize != 0 ? ' span' . $bootstrapSize : '';

if (!empty ($module->content)) : ?>
<<?php echo $moduleTag; ?> class="moduletable<?php echo htmlspecialchars($params->get('moduleclass_sfx')); ?><?php echo $moduleClass; ?>">

<?php if ((bool) $module->showtitle) :?>
<<?php echo $headerTag; ?> class="<?php echo $params->get('header_class'); ?>"><?php echo $module->title; ?></<?php echo $headerTag; ?>>
<?php endif; ?>

<?php echo $module->content; ?>

</<?php echo $moduleTag; ?>>

<?php endif;
}

/*
 * Module chrome that wraps the module in a table
 */
function modChrome_table($module, &$params, &$attribs)
{ ?>
<table cellpadding="0" cellspacing="0" class="moduletable<?php echo htmlspecialchars($params->get('moduleclass_sfx')); ?>">
<?php if ((bool) $module->showtitle) : ?>
<tr>
<th>
<?php echo $module->title; ?>
</th>
</tr>
<?php endif; ?>
<tr>
<td>
<?php echo $module->content; ?>
</td>
</tr>
</table>
<?php
}

/*
 * Module chrome that wraps the tabled module output in a <td> tag of another table
 */
function modChrome_horz($module, &$params, &$attribs)
{ ?>
<table cellspacing="1" cellpadding="0" width="100%">
<tr>
<td>
<?php modChrome_table($module, $params, $attribs); ?>
</td>
</tr>
</table>
<?php
}

/*
 * XHTML (divs and font headder tags)
 */
function modChrome_xhtml($module, &$params, &$attribs)
{
if (!empty ($module->content)) : ?>
<div class="moduletable<?php echo htmlspecialchars($params->get('moduleclass_sfx')); ?>">
<?php if ((bool) $module->showtitle) : ?>
<h3><?php echo $module->title; ?></h3>
<?php endif; ?>
<?php echo $module->content; ?>
</div>
<?php endif;
}

/*
 * Module chrome that allows for rounded corners by wrapping in nested div tags
 */
function modChrome_rounded($module, &$params, &$attribs)
{ ?>
<div class="module<?php echo htmlspecialchars($params->get('moduleclass_sfx')); ?>">
<div>
<div>
<div>
<?php if ((bool) $module->showtitle) : ?>
<h3><?php echo $module->title; ?></h3>
<?php endif; ?>
<?php echo $module->content; ?>
</div>
</div>
</div>
</div>
<?php
}

/*
 * Module chrome that add preview information to the module
 */
function modChrome_outline($module, &$params, &$attribs)
{
static $css = false;
if (!$css)
{
$css = true;
$doc = JFactory::getDocument();

$doc->addStyleDeclaration(".mod-preview-info { padding: 2px 4px 2px 4px; border: 1px solid black; position: absolute; background-color: white; color: red;}");
$doc->addStyleDeclaration(".mod-preview-wrapper { background-color:#eee; border: 1px dotted black; color:#700;}");
}
?>
<div class="mod-preview">
<div class="mod-preview-info"><?php echo 'Position: ' . $module->position . ' [ Style: ' . $module->style . ']'; ?></div>
<div class="mod-preview-wrapper">
<?php echo $module->content; ?>
</div>
</div>
<?php
}
function modChrome_menu($module, &$params, &$attribs)
{
    @$menutitle = JMenuSite::getInstance('site')->getActive()->title;
    if (!empty ($module->content)) : ?>
        <div class="moduletable<?php echo htmlspecialchars($params->get('moduleclass_sfx')); ?>">
<?php if ((bool) $module->showtitle) : ?>
            <h3><?php echo ($menutitle ? $menutitle: $module->title); ?></h3>
        <?php endif; ?>
            <?php echo $module->content; ?>
</div>
    <?php endif;
}

Вот, а как его теперь подключить в шаблон с этим стилем?
*

Nuta

  • Захожу иногда
  • 59
  • 2 / 0
Чуть выше я приводила код template.php
Там модули так не подключаются
<jdoc:include type="modules" name="younamemodule" style="menu" />

Вот позиция в шаблоне, где должен находиться мой модуль
Код
<?php if ($this['modules']->count('sidebar-b')) : ?>
<aside id="sidebar-b" class="grid-box"><?php echo $this['modules']->render('sidebar-b', array('layout'=>'stack')); ?></aside>
<?php endif; ?>
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Код: php-brief
<?php echo $this['modules']->render('younamemodule', array('style'=>'menu')); ?>
или
Код: php-brief
<?php
$mod_id=10; //посмотрите в админ панели ид модуля
$db = JFactory::getDBO();
$query = $db->getQuery(true)->select('*')->from('#__modules')->where('id=' . (int)$mod_id);
$module = $db->setQuery($query)->loadObject();
@$menutitle = JMenuSite::getInstance('site')->getActive()->title;
echo ($menutitle ? $menutitle: $module->title);
echo JModuleHelper::renderModule($module);
?>
или
Код: php-brief
<?php
//$module = JModuleHelper::getModule('mod_name');
$module = JModuleHelper::getModule('mod_name', 'Заголовок модуля');
@$menutitle = JMenuSite::getInstance('site')->getActive()->title;
echo ($menutitle ? $menutitle: $module->title);
echo JModuleHelper::renderModule($module);
?>
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Алиас пункта меню совпадает с именем подкаталога в каталоге с сист.файлами

Автор Andrey N.

Ответов: 14
Просмотров: 4008
Последний ответ 07.10.2021, 23:57:15
от Garrr
Главное меню

Автор Анастасия87

Ответов: 7
Просмотров: 1933
Последний ответ 21.05.2021, 08:40:40
от arma
Как вывести все категории VirtueMart 3 второго уровня списком?

Автор Damarkuzz

Ответов: 0
Просмотров: 1234
Последний ответ 06.07.2020, 18:58:23
от Damarkuzz
Как сократить вертикальное расстояние между меню сайта и баннером?

Автор MultiMatrix83

Ответов: 2
Просмотров: 1607
Последний ответ 16.02.2020, 19:30:25
от MultiMatrix83
Редактирование Модуля - в меню не удаляется пункт

Автор bovinkm

Ответов: 4
Просмотров: 1785
Последний ответ 16.08.2019, 15:00:22
от bovinkm