Новости Joomla

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

somick

  • Захожу иногда
  • 105
  • 8 / 0
Есть меню:

Родительская категория -- дочерний пункт меню1
                                   -- дочерний пункт меню2
                                   -- дочерний пункт меню3
                                   -- дочерний пункт меню4--тут еще дочернее меню

Суть в том, что требуется на одной странице вывести "дочерний пункт меню1" и "дочерний пункт меню2" одним модулем, а "дочерний пункт меню3" и "дочерний пункт меню4" другим модулем.

Я использовал вот этот способ вывода связанного меню. Но он выводит ВСЕ пункты уровня меню в модуле. А надо пункты одного уровня вывести в разных местах. Возможно ли это?
« Последнее редактирование: 28.05.2010, 00:57:13 от 4webspot »
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Я думаю что можно, если переопределить файл mod_mainmenu/tmpl/default.php. в нем попытаться проверять в какую позицию в данный момент выводится модуль(что врядли удастся. ну можно например по классу определить) и в зависимости от позиции фильтровать пункты по айди. правда будет отсутствовать возможность управления всем этим делом из админки...
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

palexa

  • Завсегдатай
  • 1108
  • 88 / 0
Ну так создай два новых меню и выводи эти модули где надо. Этот вариант будет работать, если используеться SEO Joomla, если нет, то это дополнительное меню прописывать как обычная ссылка, вот и всё

P.S. Правда вот патвей нарушиться, но что поделать
*

somick

  • Захожу иногда
  • 105
  • 8 / 0
Ну так создай два новых меню и выводи эти модули где надо. Этот вариант будет работать, если используеться SEO Joomla, если нет, то это дополнительное меню прописывать как обычная ссылка, вот и всё

P.S. Правда вот патвей нарушиться, но что поделать
У меня включен стандартный SEF. Громоздкий компонент ставить на сайт, состоящий из текстового контента чуть более чем полностью не хотелось бы. А этот самый стандартный SEF при создании ссылки ориентируется на  структуру меню. Значит, структуру рушить нельзя.

Можно, конечно, два меню сделать, но очень не хотелось бы. Даже возможно так и придется сделать, если не найду решение. Как я только не извращался уже... Чувствую опять бардак в ссылках будет. Простейший же сайт вообще без расширений практически. Ну куда ему СЕФ...
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
ну попробуй мое решение. я б так и сделал)
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

palexa

  • Завсегдатай
  • 1108
  • 88 / 0
Ну правильно, я писал про стандартный SEF Joomla, ссылки остануться, единственно пострадает строка пути. но если честно, она редко приносить большую пользу.
*

somick

  • Захожу иногда
  • 105
  • 8 / 0
ну попробуй мое решение. я б так и сделал)
Это малость сложно для меня =)
Ну правильно, я писал про стандартный SEF Joomla, ссылки остануться, единственно пострадает строка пути. но если честно, она редко приносить большую пользу.
Меняются ссылки к сожалению. Если меню не разбито будет:
http://joomlaforum.ru/razdel/kategoria/material.html
Разбив, получив:
http://joomlaforum.ru/razdel.html
и в нем меню имеющие ссылки вида
http://joomlaforum.ru/kategoria1/material.html
http://joomlaforum.ru/kategoria2/material.html
...

*

palexa

  • Завсегдатай
  • 1108
  • 88 / 0
Ну да, действительно, будут меняться ссылки. Сори
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
смотри. делаешь так. копируешь modules/mod_mainmenu/tmpl/default.php в templates/твой_шаблон/html/mod_mainmenu/default.php
далее делаешь так.
копируешь код с начиная с
if ( ! defined('modMainMenuXMLCallbackDefined') )

и до    define('modMainMenuXMLCallbackDefined', true);
}

. вставляешь его чуть ниже. переименовываешь имя функции, и дифайн, например modMainMenuXMLCallbackDefined2

далее переделываешь код что внизу остался так:


if ($params->get('tag_id')  == 'menu1') {
   modMainMenuHelper::render($params, 'modMainMenuXMLCallback');
} else {
   modMainMenuHelper::render($params, 'modMainMenuXMLCallback2');
}
Затем в одной функции добавляешь
   if ($node->name() == 'ul') {
      foreach ($node->children() as $child)
      {
         if ( in_array($child->attributes('id'), array(1,2,4) )) {
            $node->removeChild($child);
         }
      }
   }

соответсвенно в в массиве указываешь айди, которые не нужно выводить. во второй функции добавляешь тоже, но только со знаком ! перед in_array()

Далее в админке указываешь у первого меню айди тега меню menu1 а у второго любой другой. не спутай с суффиксами модуля и меню!

Логика работы такая. Объявляется две функции. первая фильтрует меню, удаляя указанные пункты по айди, вторая наоборот делает
Далее проверяется введенный айди тега меню, если это первое меню - значит используем первую функцию. както так...
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!

Добрый вечер! Нужна помощь.
Вопрос вот в чем. Допустим есть пункт меню - "НОВОСТИ". В этих новостях есть подменю, ну, допустим - Спорта, Видео, и т.д. При нажатии на кнопку "НОВОСТИ" - открывается страничка на которой все новости (спорта, видео и т.д.). А при нажатии на кнопки подменю - открывается то, что нужно, а именно - в спорте новости спорта, в видео - новости видео и т.д. Как сделать, чтобы при нажатии на "НОВОСТЬ" - раскрывались только подменюшки без вывода информации. Одним словом убрать ссылку с пункта меню, а подменю оставить без изменений? Заранее благодарен.
*

palexa

  • Завсегдатай
  • 1108
  • 88 / 0
Re: Два модуля одного меню на странице.
« Ответ #10 : 27.05.2010, 23:15:55 »
Добрый вечер! Нужна помощь.
Вопрос вот в чем. Допустим есть пункт меню - "НОВОСТИ". В этих новостях есть подменю, ну, допустим - Спорта, Видео, и т.д. При нажатии на кнопку "НОВОСТИ" - открывается страничка на которой все новости (спорта, видео и т.д.). А при нажатии на кнопки подменю - открывается то, что нужно, а именно - в спорте новости спорта, в видео - новости видео и т.д. Как сделать, чтобы при нажатии на "НОВОСТЬ" - раскрывались только подменюшки без вывода информации. Одним словом убрать ссылку с пункта меню, а подменю оставить без изменений? Заранее благодарен.

Можно поставить пункт меню НОВОСТИ как separator

Но это уже зависит как сделано само меню, я попробывал, у меня работает отоюражаеться без искажений
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: Два модуля одного меню на странице.
« Ответ #11 : 27.05.2010, 23:23:27 »
это делается джаваскриптом. пишется обработчик на onclick пункта меню. ссылку лучше не убирать, а то с отключенным js будет некрасиво.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

somick

  • Захожу иногда
  • 105
  • 8 / 0
Re: Два модуля одного меню на странице.
« Ответ #12 : 27.05.2010, 23:52:51 »
danik.html, получилось. спасибо.
*

novastar

  • Новичок
  • 3
  • 1 / 0
Почитал про способ danik.html, решил сделать немного поудобнее, чтобы из админки редактировать можно было. В итоге default.php принял такой вот вид (функции modMainMenuXMLCallback2 у меня нет, не пригодилась):

function modMainMenuXMLCallback(&$node, $args)
{
   $user   = &JFactory::getUser();
   $menu   = &JSite::getMenu();
   $active   = $menu->getActive();
   $path   = isset($active)? array_reverse($active->tree) : null;

   $session =& JFactory::getSession();
   $ns_flag = $session->get('ns_flag');
   $ns_ids = $session->get('ns_ids');
...

   if ($node->name() == 'ul') {
      foreach ($node->children() as $child)
      {
         if (($ns_flag)&&(!in_array($child->attributes('id'), $ns_ids ))) {
            $node->removeChild($child);
         }
         if ($child->attributes('access') > $user->get('aid', 0)) {
            $node->removeChild($child);
         }
      }
   }

...

   define('modMainMenuXMLCallbackDefined', true);
}

$ns_flag = false;
if ($params->get('tag_id')=="separated"){
   $ns_flag = true;
   $ns_ids = explode("-",trim($params->get('class_sfx')));
}
$session =& JFactory::getSession();
$session->set('ns_flag', $ns_flag);
$session->set('ns_ids', $ns_ids);

modMainMenuHelper::render($params, 'modMainMenuXMLCallback');

т.е. получается что в расширенных параметрах меню мы задаем ID = separated, а cуффикс класса меню = " Id пункта1-id пункта 2-id пункта3"

Так вот вопрос у меня - параметры эти как можно еще кроме как через сессию ловить? Глупо ведь в сессии-то их хранить...
*

novastar

  • Новичок
  • 3
  • 1 / 0
И, кстати, да, через ID была тоже идея не очень делать - валидность нарушается. Сделал все через суффикс класса меню
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Отлично. Правда если чесно - я подумывал о такой модификации))
Насчет сохранения в сессию - думаю не лучший вариант, уж лучше global использовать. Хреново что в декоратор $params не передается.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

novastar

  • Новичок
  • 3
  • 1 / 0
Да, насчет сессии я затупил конечно, забыл про $GLOBALS, быдлокодер же ))) В общем все получилось в итоге )))
Вместо верхней сессии:
   $ns_flag = $GLOBALS['ns_flag'];
   $ns_ids = $GLOBALS['ns_ids'];
Вместо нижней сессии:
   $GLOBALS['ns_flag']=$ns_flag;
   $GLOBALS['ns_ids']=$ns_ids;
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как поменять положения баннера на странице?

Автор Lzrv

Ответов: 2
Просмотров: 4572
Последний ответ 12.12.2017, 12:22:55
от Lzrv
Как убрать пункт меню «Главная»?

Автор wdesign

Ответов: 17
Просмотров: 24771
Последний ответ 20.09.2017, 21:38:35
от WiseEagle
Вопрос по настройке новостной ленты на главной странице сайта

Автор jaff

Ответов: 13
Просмотров: 7714
Последний ответ 15.09.2017, 15:49:19
от sect
Нагрузка на сервер - РЕШЕНО

Автор se_demon

Ответов: 20
Просмотров: 7520
Последний ответ 13.08.2016, 13:55:25
от Escander
Как сделать на странице ссылку на скачивание файла с хостинга?

Автор lsd77777

Ответов: 19
Просмотров: 17995
Последний ответ 27.07.2016, 01:58:03
от SokoloWWW