Вопрос по активной ссылке в меню
- Андрей Нестеров
-
Автор темы
- Не в сети
- Захожу иногда
-
Less
Больше
- Сообщений: 37
- Спасибо получено: 1
11 года 9 мес. назад #6932
от Андрей Нестеров
Андрей Нестеров создал тему: Вопрос по активной ссылке в меню
Доброго времени суток! Такая ситуация с активными ссылками в меню - сайт
armymusic.ru
;
на главной странице ссылки в меню выглядят следующим образом:
Т.е. пункт меню "Главная" находится в активном состоянии - подсвечен.
К примеру, перейдем в раздел "Биографии". Меню становится таким:
Т.е. в активное состояние переходит пункт меню "Биографии".
Дальше, к примеру, в данном разделе перейдем в какой-нибудь материал.
В результате, казалось бы, в активном состоянии должен был остаться
пункт меню "Биографии", НО у меня это не так - активным вновь становится
пункт меню "Главная".
Посмотрел на других сайтах - такого нигде не наблюдается.
В чем может быть проблема?
на главной странице ссылки в меню выглядят следующим образом:
Т.е. пункт меню "Главная" находится в активном состоянии - подсвечен.
К примеру, перейдем в раздел "Биографии". Меню становится таким:
Т.е. в активное состояние переходит пункт меню "Биографии".
Дальше, к примеру, в данном разделе перейдем в какой-нибудь материал.
В результате, казалось бы, в активном состоянии должен был остаться
пункт меню "Биографии", НО у меня это не так - активным вновь становится
пункт меню "Главная".
Посмотрел на других сайтах - такого нигде не наблюдается.
В чем может быть проблема?
Пожалуйста Войти , чтобы присоединиться к беседе.
- Wedal
-
- Не в сети
- Администратор
-
Less
Больше
- Сообщений: 2879
- Спасибо получено: 659
11 года 9 мес. назад #6934
от Wedal
Wedal ответил в теме Вопрос по активной ссылке в меню
Андрей, дело в том, что ваш пункт меню "Биографии" должен иметь тип "блог категории". Активный пункт меню привязан по параметру ItemID в URL. ID этого пункта меню должно добавляться ко всем страницам категории. Это возможно только так, как я описал выше.
Пожалуйста Войти , чтобы присоединиться к беседе.
- Андрей Нестеров
-
Автор темы
- Не в сети
- Захожу иногда
-
Less
Больше
- Сообщений: 37
- Спасибо получено: 1
11 года 9 мес. назад #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 пункта меню добавляется ко всем страницам категории.
Пункт меню "Биографии" и так имеет тип "Блок категории".
Отключил ЧПУ, посмотрел на ссылки:
- обычной ссылке 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 пункта меню добавляется ко всем страницам категории.
Пожалуйста Войти , чтобы присоединиться к беседе.
- Wedal
-
- Не в сети
- Администратор
-
Less
Больше
- Сообщений: 2879
- Спасибо получено: 659
11 года 9 мес. назад #6938
от Wedal
Wedal ответил в теме Вопрос по активной ссылке в меню
Андрей, значит здесь все настроено правильно. Тогда остается вариант, что разработчики шаблона переделали код вывода меню. Нужно в шаблоне открыть файл, отвечающий за вывод меню и посмотреть, как же реально добавляется класс активного пункта. Так вот, не видя кода, не сказать. Но очевидно, что это баг или особенность шаблона.
Пожалуйста Войти , чтобы присоединиться к беседе.
- Андрей Нестеров
-
Автор темы
- Не в сети
- Захожу иногда
-
Less
Больше
- Сообщений: 37
- Спасибо получено: 1
11 года 9 мес. назад #6942
от Андрей Нестеров
Андрей Нестеров ответил в теме Вопрос по активной ссылке в меню
Выкладываю код модуля меню, который изначально переопределен (при установке шаблона) в папке HTML шаблона:
И вот ссылка на демо шаблона demo.joomlashine.com/joomla-templates/jsn_neon/pro/index.php ,
там вроде такой проблемы не наблюдается.
Где я мог накосячить?
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 ,
там вроде такой проблемы не наблюдается.
Где я мог накосячить?
Пожалуйста Войти , чтобы присоединиться к беседе.
- Wedal
-
- Не в сети
- Администратор
-
Less
Больше
- Сообщений: 2879
- Спасибо получено: 659
11 года 9 мес. назад #6947
от Wedal
Wedal ответил в теме Вопрос по активной ссылке в меню
Андрей, по вашему коду могу сказать вот что:
1) Пункт меню подсвечивает класс active
2) Он формируется в этом файле в следующем кусочке кода:
3) Этот код скорее всего проверяет есть ли ID текущего пункта меню в массиве $path.
4) Массив $path выводится откуда-то из фреймворка:
Больше ничего не скажу, не хватает данных.
1) Пункт меню подсвечивает класс active
2) Он формируется в этом файле в следующем кусочке кода:
Code:
if (in_array($item->id, $path)) {
$class .= 'active ';
}
4) Массив $path выводится откуда-то из фреймворка:
Code:
require_once JPATH_ROOT . '/plugins/system/jsntplframework/jsntplframework.defines.php';
require_once JPATH_ROOT . '/plugins/system/jsntplframework/libraries/joomlashine/loader.php';
Больше ничего не скажу, не хватает данных.
Пожалуйста Войти , чтобы присоединиться к беседе.
- Андрей Нестеров
-
Автор темы
- Не в сети
- Захожу иногда
-
Less
Больше
- Сообщений: 37
- Спасибо получено: 1
11 года 9 мес. назад #6955
от Андрей Нестеров
Андрей Нестеров ответил в теме Вопрос по активной ссылке в меню
Файл jsntplframework.defines.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');
// 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';
Пожалуйста Войти , чтобы присоединиться к беседе.
- Wedal
-
- Не в сети
- Администратор
-
Less
Больше
- Сообщений: 2879
- Спасибо получено: 659
11 года 9 мес. назад #6958
от Wedal
Wedal ответил в теме Вопрос по активной ссылке в меню
Андрей, имеем:
Теперь нужно найти, где определяется $className
Code:
$path = strtolower(preg_replace('/([A-Z])/', '/\\1', substr($className, 6)));
Пожалуйста Войти , чтобы присоединиться к беседе.
- Андрей Нестеров
-
Автор темы
- Не в сети
- Захожу иногда
-
Less
Больше
- Сообщений: 37
- Спасибо получено: 1
11 года 9 мес. назад #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 .
Пока советы с него мне не помогли, может Вас на что-то натолкнут.
- 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 .
Пока советы с него мне не помогли, может Вас на что-то натолкнут.
Пожалуйста Войти , чтобы присоединиться к беседе.
- Андрей Нестеров
-
Автор темы
- Не в сети
- Захожу иногда
-
Less
Больше
- Сообщений: 37
- Спасибо получено: 1
11 года 8 мес. назад #7031
от Андрей Нестеров
Андрей Нестеров ответил в теме Вопрос по активной ссылке в меню
Виталий, добрый день!
Если я Вам предоставлю доступ к тестовому сайту, Вы можете посмотреть решение моей проблемы?
Заранее спасибо!
Если я Вам предоставлю доступ к тестовому сайту, Вы можете посмотреть решение моей проблемы?
Заранее спасибо!
Пожалуйста Войти , чтобы присоединиться к беседе.
- Wedal
-
- Не в сети
- Администратор
-
Less
Больше
- Сообщений: 2879
- Спасибо получено: 659
11 года 8 мес. назад #7033
от Wedal
Wedal ответил в теме Вопрос по активной ссылке в меню
Андрей, за деньги.
Пожалуйста Войти , чтобы присоединиться к беседе.
- Андрей Нестеров
-
Автор темы
- Не в сети
- Захожу иногда
-
Less
Больше
- Сообщений: 37
- Спасибо получено: 1
11 года 8 мес. назад #7035
от Андрей Нестеров
Андрей Нестеров ответил в теме Вопрос по активной ссылке в меню
Виталий, цена вопроса?
Пожалуйста Войти , чтобы присоединиться к беседе.
- Wedal
-
- Не в сети
- Администратор
-
Less
Больше
- Сообщений: 2879
- Спасибо получено: 659
11 года 8 мес. назад #7038
от Wedal
Wedal ответил в теме Вопрос по активной ссылке в меню
Андрей, пишите на email.
Пожалуйста Войти , чтобы присоединиться к беседе.