Joomla. Не уверен - заходи!-2

redbeatles
На сайте с 29.07.2010
Offline
149
#211

alexj69, крайне неудобно перед Вами, но ссыль дать не могу. Все же мой пациент, деньги приносит. Не могу рисковать даже в ЛС. Спасибо за помощь!

Системы гарантированного электропитания. Проектирование. Пусконаладочные работы. Источники бесперебойного питания, генераторы, стабилизаторы напряжения.
alexj69
На сайте с 05.06.2007
Offline
88
#212

Как хотите, я же не доступ в админку прошу, а только посмотреть какие ссылки формируются

redbeatles
На сайте с 29.07.2010
Offline
149
#213

alexj69, я не хочу Вас обвинять в том,ч его вы, возможно, никогда не делали и, надеюсь, не сделаете. Надеюсь Вы честный и порядочный человек. Но сайты показывать никому не буду, это кредо, пускай иногда и во вред себе.

Ссылки точно такие, как я уже показывал:

www.domen.ru/index.php?Itemid=986

Ни в админке, ни в sh404sef таких и близко нет.

Пытался делать 301-й

Redirect 301 /index.php?Itemid=986 http:/www.domen.ru/razdel/

Пытался загонять их в sh404SEF насильно, но он их отказался принимать.

Думаю попробовать другое меню.

alexj69
На сайте с 05.06.2007
Offline
88
#214

Похоже, что у вас вообще компонент не работает.... В настройках компонента Режим Перезаписи (Rewriting) проверьте - должно стоять mod_rewrite

redbeatles
На сайте с 29.07.2010
Offline
149
#215

alexj69, все стоит. Как это по-другому, 7000 ссылок генерирует, а на разделы и категории из ОДНОГО меню - нет, а на другие меню - да =)

Я точно говрю, дело в в том, кокой тип ссылок указан для вывода в коде MOOMENU. Его надо править, только где бы спеца найти, у Вас никого нет?

alexj69
На сайте с 05.06.2007
Offline
88
#216

Как же его править, если Вы пациента не показываете?))) Насколько я понял, проблема с ссылками ТОЛЬКО одного меню. Это меню стандартное или он какого-либо стороннего компонента?

redbeatles
На сайте с 29.07.2010
Offline
149
#217

alexj69, все верно. Проблема только с одним меню. Вот DEMO моего шаблона, я его конечно, переделал, но функционал и внешний вид меню не трогал. Вот Вам и пациент. А вот файл PHP:

<?php

/**
* @version 1.5.x
* @package JoomVision Project
* @email webmaster@joomvision.com
* @copyright (C) 2008 http://www.JoomVision.com. All rights reserved.
*/
// No direct access
defined('_JEXEC') or die();
/**
* Class Menu Common
*
*/
class MenuSystem{
var $_name = null;
var $_template = null;
var $_start = null;
var $_end = null;
var $_suffix = null;
var $_active = null;
var $_type = null;
var $_cache = null;
var $_nav = null;
var $Itemid = null;

/**
* Enter description here...
*
* @param string $name
* @param string $menutype
* @param string $template_name
* @param string $suffix
* @return MenuSystem
*/
function MenuSystem( $name,$menutype,$template_name, $suffix="" ){
global $Itemid;
$this->_name = $name;
$this->_template = $template_name;
$this->_suffix = $suffix;
$this->_type = $menutype;
$this->Itemid = $Itemid;
$document =& JFactory::getDocument();
$document->addStyleSheet(JURI::base().'templates/'.$this->_template.'/jv_menus/'.'jv_'.$this->_name.'menu/'.'jv.'.$this->_name.'menu.css');
$document->addCustomTag('<script type="text/javascript" src="'.JURI::base().'templates/'.$this->_template.'/jv_menus/'.'jv_'.$this->_name.'menu/'.'jv.'.$this->_name.'menu.js"></script>');
/*
if ($this->_name == 'dropline') {
$document->addCustomTag('<script type="text/javascript">var menusys_active = new Array('. ( (count($this->_active) == 1) ? '"'.$this->open[0].'"' : implode(",", array_reverse($this->_active)) ) .');</script>');
}
*/
$this->genmenu();
}
function hasChild($lvl) {
$pid = $this->fatherId ($lvl);
if (!$pid) return false;
if (@$this->_nav[$pid]) return true;
else return false;
}
function _showMenuDetail($row, $level = 0) {
$_temp = null;
$title = "title=\"$row->name\"";
$menu_params = & new JParameter ($row->params);
if ($row->type == 'separator') {
echo '<a href="javascript://" title=""><span class="separator">'.$row->name.'</span></a>';
}
if ($menu_params->get('menu_image') && $menu_params->get('menu_image') != -1) {
$str = '<img src="images/stories/'.$menu_params->get('menu_image').'" alt="'.$row->name.'" /><span class="menusys_name">'.$row->name.'</span>';
} else {
$str = '<span class="menusys_name">'.$row->name.'</span>';
}

$Class = $this->activeClass ($row, $level);
$id='id="menusys'.$row->id.'"';

if ($row->url != null) {
if ($row->browserNav == 0) {
$menuItem = '<a href="'.$row->url.'" '.$Class.' '.$id.' '.$title.'>'.$str.'</a>';
} elseif ($row->browserNav == 1) {
$menuItem = '<a target="_blank" href="'.$row->url.'" '.$Class.' '.$id.' '.$title.'>'.$str.'</a>';
} elseif ($row->browserNav == 2) {
$url = str_replace('index.php', 'index2.php', $tmp->url);
$atts = 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=500,height=350';
$menuItem = '<a href="'.$url.'" onclick="window.open("'.$url.'",\'targetWindow\',\''.$atts.'\'); return false;" '.$Class.' '.$id.' '.$title.'>'.$str.'</a>';
}
} else {
$menuItem = '<a '.$active.' '.$id.' '.$title.'>'.$str.'</a>';
}

echo $menuItem;
}
function show($start=0, $end = 14) {
$this->_start = $start;
$this->_end = $end;
echo "<div class=\"menusys_".$this->_name.$this->_suffix."\">";
if ($this->_start == 0) {
//~~ Only first level will be shown ~~
$this->showMenu (0, 0);
}else{
$parID = $this->fatherId($this->_start);
if ($parID) $this->showMenu ($parID, $this->_start);
}
echo "</div>";
}
function showMenu($pid, $level) {
if (@$this->_nav[$pid]) {
if ($level == 0) {
echo "<ul id=\"menusys_".$this->_name."\">";
} elseif($level == 1 && ($this->_name == 'submoo' || $this->_name == 'split')) {
echo "<ul id=\"menusub_".$this->_name."\">";
} else {
echo "<ul>";
}
$i = 0;
foreach ($this->_nav[$pid] as $menu) {
if(@$this->_nav[$menu->id])
$abc = " hasChild";
else
$abc = "";
if ($i == 0) echo '<li class="first-item'.$abc.'">';
elseif ($i == count($this->_nav[$pid]) - 1) echo '<li class="last-item'.$abc.'">';
else echo '<li class="'.$abc.'">';
$this->_showMenuDetail( $menu, $level);
if ($level < $this->_end) $this->showMenu( $menu->id, $level+1 );
$i++;
echo "</li>";
}

echo "</ul>";
}
}
function activeClass ($menu_item, $level) {
return (in_array($menu_item->id, $this->_active)) ? " class=' active'" : " class=' item'";
}
//~~ This function will found the father ID of and item marked by level in array of active items ~~~~~~~
function fatherId ($lvl) {
if (!$lvl) return 0;
//echo "<pre>";print_r($this->_active);exit;
if (count($this->_active) < $lvl) return 0;
$parID = count($this->_active) - $lvl;
return $this->_active[$parID];
}

/**
* Generate the menu
*
* @return mixed
*/
function genmenu(){
$nav = @JMenu :: getInstance();

$my = &JFactory::getUser();
$nav = array();

$this->_cache = array();
if(@strtolower(get_class($menu)) == 'jexception') {
$nav = @JMenu :: getInstance('site');
}
$menus = &JSite::getMenu();
$rows = $menus->getItems('menutype', $this->_type);
$_tmp = array();
if (count($rows)) {
foreach ($rows as $key => $value) {
if ($value->access <= $my->get('gid')) {
$par = $value->parent;
$list_menu = @ ($nav[$par]) ? $nav[$par] : array ();
if ($value->type == 'separator') {
return '<span class="separator">'.$value->name.'</span>';
} elseif ($value->type == 'url') {
if ((strpos($value->link, 'index.php?') !== false) && (strpos($value->link, 'Itemid=') === false)) {
$value->url = $value->link.'&amp;Itemid='.$value->id;
} else {
$value->url = $value->link;
}
} else {
$router = JSite::getRouter();
if ($router->getMode() == JROUTER_MODE_SEF) {
//~~ No JRoute now ~~~
$value->url = 'index.php?Itemid='.$value->id;
} else {
//~~ No JRoute now ~~~
$value->url = $value->link.'&amp;Itemid='.$value->id;
}
}
$value->_index = count($list_menu);
$list_menu[] = $value;
$nav[$par] = $list_menu;
}
$this->_cache[$value->id] = $value;
$_tmp[$value->id] = $key;
}
}
$this->_nav = $nav;
//~~ Find out what submenus this item has ~~~~~~~~~~~
$active = array ($this->Itemid);
$max = 14;
//~~ We dont need more than 14 levels of menu, do we? ~~~
$id = $this->Itemid;
while ($max) {
if (isset($_tmp[$id])) {
$tmp = $_tmp[$id];
if (isset ($rows[$tmp]) && $rows[$tmp]->parent > 0) {
$id = $rows[$tmp]->parent;
$active[] = $id;
} else {
break;
}
}
$max--;
}
$this->_active = $active;
}
}
?>

, именно он несет ответственность за кривость этих ссылок. Если я отключаю это меню (moomenu) то получаю стандартное неотесанное меню, которое не горизонтальное, а вертикально и совсем не вписывается в дизайн, но при этом ссылки там такие, как нужно.

Вопрос в том, что нужно изменить в этом коде, чтобы ссылки были такого же типа, как и с стандартном меню. Но я повторюсь еще раз, в PHP полный нубяра. Есть мысли по этому поводу?

---------- Добавлено 18.05.2012 в 14:11 ----------

Вот внешний вид меню, если что:

Saitoff
На сайте с 27.05.2011
Offline
71
#218
redbeatles:
Есть мысли по этому поводу?

А может модуль меню сменить? Есть много шикарных модулей, нормально поддерживающих SEF... Почему именно этот модуль вам так дорог?

redbeatles
На сайте с 29.07.2010
Offline
149
#219

Saitoff, все идеально встроено в дизайн. Да и позиции для модуля по факту нет на том месте. Я уже думал прикрутить другой модель меню, никак. Шаблон сверстан так, что подходит только этот скрипт, ну или нужно пилить стандартный модуль меню, чтобы он так же красиво вписался в дизайн.

Там реально заменить 4- 5 строчек максимум, но все поисковики молчат. Руки опускаться начинают.

alexj69
На сайте с 05.06.2007
Offline
88
#220

Видимо 404-компонент не поддерживает этот модуль. Проще и быстрее добавить в шаблон новую позицию для модуля и через css прописать нормальное меню

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий