Куда идем?

Вопрос по активной ссылке в меню

  • Андрей Нестеров
  • Автор темы
  • Не в сети
  • Захожу иногда
  • Захожу иногда
Больше
9 года 7 мес. назад #6932 от Андрей Нестеров
Андрей Нестеров создал тему: Вопрос по активной ссылке в меню
Доброго времени суток! Такая ситуация с активными ссылками в меню - сайт armymusic.ru ;
на главной странице ссылки в меню выглядят следующим образом:



Т.е. пункт меню "Главная" находится в активном состоянии - подсвечен.

К примеру, перейдем в раздел "Биографии". Меню становится таким:



Т.е. в активное состояние переходит пункт меню "Биографии".

Дальше, к примеру, в данном разделе перейдем в какой-нибудь материал.
В результате, казалось бы, в активном состоянии должен был остаться
пункт меню "Биографии", НО у меня это не так - активным вновь становится
пункт меню "Главная".

Посмотрел на других сайтах - такого нигде не наблюдается.

В чем может быть проблема?

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

Больше
9 года 7 мес. назад #6934 от Wedal
Андрей, дело в том, что ваш пункт меню "Биографии" должен иметь тип "блог категории". Активный пункт меню привязан по параметру ItemID в URL. ID этого пункта меню должно добавляться ко всем страницам категории. Это возможно только так, как я описал выше.

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

  • Андрей Нестеров
  • Автор темы
  • Не в сети
  • Захожу иногда
  • Захожу иногда
Больше
9 года 7 мес. назад #6935 от Андрей Нестеров
Андрей Нестеров ответил в теме Вопрос по активной ссылке в меню
Виталий, добрый день!

Пункт меню "Биографии" и так имеет тип "Блок категории".

Отключил ЧПУ, посмотрел на ссылки:

- обычной ссылке armymusic.ru/biografii.html соответствует armymusic.ru/index.php?option=com_content&view=category&layout=blog&id=121&Itemid=1389

- обычной ссылке armymusic.ru/biografii/136-petryaev-valerij.html соответствует armymusic.ru/index.php?option=com_content&view=article&id=136:petryaev-valerij&catid=121&Itemid=1389

Я, конечно, не спец, но вроде как ID пункта меню добавляется ко всем страницам категории.

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

Больше
9 года 7 мес. назад #6938 от Wedal
Андрей, значит здесь все настроено правильно. Тогда остается вариант, что разработчики шаблона переделали код вывода меню. Нужно в шаблоне открыть файл, отвечающий за вывод меню и посмотреть, как же реально добавляется класс активного пункта. Так вот, не видя кода, не сказать. Но очевидно, что это баг или особенность шаблона.

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

  • Андрей Нестеров
  • Автор темы
  • Не в сети
  • Захожу иногда
  • Захожу иногда
Больше
9 года 7 мес. назад #6942 от Андрей Нестеров
Андрей Нестеров ответил в теме Вопрос по активной ссылке в меню
Выкладываю код модуля меню, который изначально переопределен (при установке шаблона) в папке HTML шаблона:
Code:
<?php /** * @version $Id: default.php 20196 2011-01-09 02:40:25Z ian $ * @package Joomla.Site * @subpackage mod_menu * @copyright Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ // No direct access. defined('_JEXEC') or die; // Load template framework if (!defined('JSN_PATH_TPLFRAMEWORK')) { require_once JPATH_ROOT . '/plugins/system/jsntplframework/jsntplframework.defines.php'; require_once JPATH_ROOT . '/plugins/system/jsntplframework/libraries/joomlashine/loader.php'; } $app = JFactory::getApplication(); $template = $app->getTemplate(); $jsn_utils = JSNTplUtils::getInstance(); // Note. It is important to remove spaces between elements. ?> <ul class="<?php echo $class_sfx;?>"<?php $tag = ''; if ($params->get('tag_id')!=NULL) { $tag = $params->get('tag_id').''; echo ' id="'.$tag.'"'; } ?>> <?php $count = 1; $menuCount = count($list); $varLastItem = 0; $flag = false; $flag_last = false; foreach ($list as $i => &$item) : $class = ''; if ($item->id == $active_id) { $class .= 'current '; } if (in_array($item->id, $path)) { $class .= 'active '; } if ($item->deeper) { $class .= 'parent '; } if( ($count == 1) || ($flag == true) ) { $class .= 'first '; } if($count == $menuCount || $item->shallower || $jsn_utils->isLastMenu($item)) { $class .= 'last '; } // Icon menu if ($item->anchor_css) { $class .= $item->anchor_css.' '; } if (!empty($class)) { $class = ' class="'.trim($class).'"'; } echo '<li '.$class.'>'; $flag = false; $item->title = html_entity_decode($item->title); // Render the menu item. switch ($item->type) { case 'separator': case 'component': require JModuleHelper::getLayoutPath('mod_menu', 'default_'.$item->type); break; default: require JModuleHelper::getLayoutPath('mod_menu', 'default_url'); break; } // The next item is deeper. if ($item->deeper) { $flag_last = true; if ($item->level==1) { echo '<ul>'; $level_1_id = $item->id; } else echo '<ul>'; $flag = true; } // The next item is shallower. else if ($item->shallower) { echo '</li>'; echo str_repeat('</ul></li>', $item->level_diff); } // The next item is on the same level. else { echo '</li>'; } $count ++; endforeach; ?></ul>

И вот ссылка на демо шаблона demo.joomlashine.com/joomla-templates/jsn_neon/pro/index.php ,
там вроде такой проблемы не наблюдается.

Где я мог накосячить?

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

Больше
9 года 7 мес. назад #6947 от Wedal
Андрей, по вашему коду могу сказать вот что:
1) Пункт меню подсвечивает класс active
2) Он формируется в этом файле в следующем кусочке кода:
Code:
if (in_array($item->id, $path)) { $class .= 'active '; }
3) Этот код скорее всего проверяет есть ли ID текущего пункта меню в массиве $path.
4) Массив $path выводится откуда-то из фреймворка:
Code:
require_once JPATH_ROOT . '/plugins/system/jsntplframework/jsntplframework.defines.php'; require_once JPATH_ROOT . '/plugins/system/jsntplframework/libraries/joomlashine/loader.php';

Больше ничего не скажу, не хватает данных.

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

  • Андрей Нестеров
  • Автор темы
  • Не в сети
  • Захожу иногда
  • Захожу иногда
Больше
9 года 7 мес. назад #6955 от Андрей Нестеров
Андрей Нестеров ответил в теме Вопрос по активной ссылке в меню
Файл jsntplframework.defines.php
Code:
<?php /** * @version $Id$ * @package JSNExtension * @subpackage TPLFramework * @author JoomlaShine Team <support@joomlashine.com> * @copyright Copyright (C) 2012 JoomlaShine.com. All Rights Reserved. * @license GNU/GPL v2 or later http://www.gnu.org/licenses/gpl-2.0.html * * Websites: http://www.joomlashine.com * Technical Support: Feedback - http://www.joomlashine.com/contact-us/get-support.html */ // No direct access to this file defined('_JEXEC') or die('Restricted access'); // Define base constants for the framework define('JSN_PATH_TPLFRAMEWORK', dirname(__FILE__)); define('JSN_PATH_TPLFRAMEWORK_LIBRARIES', JSN_PATH_TPLFRAMEWORK . '/libraries/joomlashine'); define('JSN_TPLFRAMEWORK_ID', 'tpl_framework'); define('JSN_TPLFRAMEWORK_VERSION', '2.1.4'); define('JSN_TPLFRAMEWORK_CHECK_UPDATE_PERIOD', 86400); // Define remote URL for communicating with JoomlaShine server define('JSN_TPLFRAMEWORK_LIGHTCART_URL', 'http://www.joomlashine.com/index.php?option=com_lightcart'); define('JSN_TPLFRAMEWORK_VERSIONING_URL', 'http://www.joomlashine.com/versioning/product_version.php'); define('JSN_TPLFRAMEWORK_UPGRADE_DETAILS', 'http://www.joomlashine.com/versioning/product_upgrade.php');

Файл loader.php
Code:
<?php /** * @version $Id$ * @package JSNExtension * @subpackage TPLFramework * @author JoomlaShine Team <support@joomlashine.com> * @copyright Copyright (C) 2012 JoomlaShine.com. All Rights Reserved. * @license GNU/GPL v2 or later http://www.gnu.org/licenses/gpl-2.0.html * * Websites: http://www.joomlashine.com * Technical Support: Feedback - http://www.joomlashine.com/contact-us/get-support.html */ // No direct access to this file defined('_JEXEC') or die('Restricted access'); /** * Autoload class file of JSN Template Framework. * * @param string $className Name of class needs to be loaded. * * @return boolean */ function jsn_template_framework_class_loader($className) { if (strpos($className, 'JSNTpl') === 0) { $path = strtolower(preg_replace('/([A-Z])/', '/\\1', substr($className, 6))); $fullPath = JSN_PATH_TPLFRAMEWORK_LIBRARIES . '/' . $path; // Load alternative class for backward compatible with old template version $app = JFactory::getApplication(); $tpl = $app->getTemplate(); if ($app->isSite() AND substr($tpl, 0, 4) == 'jsn_' AND ! JSNTplVersion::isCompatible($tpl, JSNTplHelper::getTemplateVersion($tpl))) { if (is_file("{$fullPath}_v1.php") AND is_readable("{$fullPath}_v1.php")) { $fullPath .= '_v1'; } } if (is_file("{$fullPath}.php") AND is_readable("{$fullPath}.php")) { return include_once "{$fullPath}.php"; } return false; } } // Register jsn_template_framework_class_loader for autoloading spl_autoload_register('jsn_template_framework_class_loader'); // Preload some required classes require_once JSN_PATH_TPLFRAMEWORK_LIBRARIES . '/helper.php'; require_once JSN_PATH_TPLFRAMEWORK_LIBRARIES . '/version.php';

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

Больше
9 года 7 мес. назад #6958 от Wedal
Андрей, имеем:
Code:
$path = strtolower(preg_replace('/([A-Z])/', '/\\1', substr($className, 6)));
Теперь нужно найти, где определяется $className

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

  • Андрей Нестеров
  • Автор темы
  • Не в сети
  • Захожу иногда
  • Захожу иногда
Больше
9 года 7 мес. назад #6960 от Андрей Нестеров
Андрей Нестеров ответил в теме Вопрос по активной ссылке в меню
Наличие $className я смог обнаружить в следующих файлах:

- plugins\system\jsntplframework\libraries\joomlashine\form\field.php

yadi.sk/d/ZMMJpgJqcEuAR

- plugins\system\jsntplframework\libraries\joomlashine\template\helper.php

yadi.sk/d/Mg0JfwcRcEuFY

- plugins\system\jsntplframework\libraries\joomlashine\template\helper_v1.php

yadi.sk/d/VtGW-xuxcEuJT

Параллельно я создал тему на этом форуме joomlaforum.ru/index.php/topic,302728.0.html .
Пока советы с него мне не помогли, может Вас на что-то натолкнут.

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

  • Андрей Нестеров
  • Автор темы
  • Не в сети
  • Захожу иногда
  • Захожу иногда
Больше
9 года 6 мес. назад #7031 от Андрей Нестеров
Андрей Нестеров ответил в теме Вопрос по активной ссылке в меню
Виталий, добрый день!

Если я Вам предоставлю доступ к тестовому сайту, Вы можете посмотреть решение моей проблемы?

Заранее спасибо!

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

Больше
9 года 6 мес. назад #7033 от Wedal
Андрей, за деньги.

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

  • Андрей Нестеров
  • Автор темы
  • Не в сети
  • Захожу иногда
  • Захожу иногда
Больше
9 года 6 мес. назад #7035 от Андрей Нестеров
Андрей Нестеров ответил в теме Вопрос по активной ссылке в меню
Виталий, цена вопроса?

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

Больше
9 года 6 мес. назад #7038 от Wedal
Андрей, пишите на email.

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.