Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Popełniłem przy pomocy Joomla! stronę [url]www.ssm.org.pl[/url]
Moja znajomość PHP jest na poziomie sławnego programu "Hello world".
Nie mogę rozgryźć nawet z pomocą podręcznika PHP pewnej sprawy.
Jest fragment pliku index.php:
<?php if ( $my->id ) initEditor(); require( "templates/".$this->template . "/menu.php"); //mosShowListMenu('topmenu'); require( "templates/".$this->template . "/cssloader.php");?>
Czy moglibyście mi wytłumaczyć co ten fragment "robi"?
Tytuł mojej strony zmienia się w zależności od tego gdzie się na niej znajduję.
Chcę ustawić na stałe nazwę Szkutniczy Serwis Modelarski.
Powyższy fragment kodu jest podejrzewany :) przeze mnie o dynamiczne generowanie nazwy.
Z mojego rozumowania :) wynika, że współodpowiedzialny jest plik menu.php, ale czego tam szukać?
Ostatnio edytowany przez Zyong (2008-03-26 17:22:08)
Offline
Która to wersja Joomli? W 1.0.15 nic takiego w /index.php nie znalazłem. Fragment zaś przez Ciebie podany, po prostu wczytuje dwa pliki: /templates/twój_styl/menu.php i /templates/twój_styl/cssloader.php w razie spełnienia warunku "($my->id)".
Offline
A gdzie tam:
w razie spełnienia warunku $my->id uruchamiana jest funkcja initEditor(), która, jak się domyślam po nazwie, odpowiada za tworzenie panelu RTF służącego do wpisywania tekstu w panelu administratora. Tudzież tworzy pole do wpisywania komentarzy.
Wczytanie wspomnianych dwóch plików — [tt]menu.php[/tt] i [tt]cssloader.php[/tt] — następuje niezależnie od tego, czy warunek zostanie spełniony, czy nie.
Przynajmniej tyle można stwierdzić na podstawie przytoczonych 3 linijek.
Offline
Używam Joomla 1.51, templatka dj-0013.
To podpowiedzcie, proszę, który fragment poniższego pliku menu.php
odpowiada za dynamiczną zmianę tytułu strony?
<?php defined( '_JEXEC' ) or die( 'Direct Access to this location is not allowed.' ); /* returns a properly nested UL menu */ //mosShowListMenu('mainmenu'); // currently hard-coded to mainmenu ini_set('arg_separator.output','&'); function mosShowListMenu($menutype) { global $mainframe; $database = $mainframe->getCfg('db'); $user =& JFactory::getUser(); $my = $user -> get('usertype'); $cur_template = $mainframe->getTemplate(); $Itemid = JRequest::getInt('Itemid'); //$mosConfig_absolute_path; $mosConfig_live_site = $mainframe->getCfg('live_site'); $contentConfig = &JComponentHelper::getParams( 'com_content' ); $mosConfig_shownoauth = !$contentConfig->get('shownoauth'); $class_sfx = null; error_reporting(E_ALL ^ E_NOTICE); $hilightid = null; /* If a user has signed in, get their user type */ $intUserType = 0; if($my->gid){ switch ($my->usertype) { case 'Super Administrator': $intUserType = 0; break; case 'Administrator': $intUserType = 1; break; case 'Editor': $intUserType = 2; break; case 'Registered': $intUserType = 3; break; case 'Author': $intUserType = 4; break; case 'Publisher': $intUserType = 5; break; case 'Manager': $intUserType = 6; break; } } else { /* user isn't logged in so make their usertype 0 */ $intUserType = 0; } if ($mosConfig_shownoauth) { $database = &JFactory::getDBO(); $database->setQuery( "SELECT m.*, count(p.parent) as cnt" . "\nFROM #__menu AS m" . "\nLEFT JOIN #__menu AS p ON p.parent = m.id" . "\nWHERE m.menutype='$menutype' AND m.published='1'" . "\nGROUP BY m.id ORDER BY m.parent, m.ordering "); } else { $database = &JFactory::getDBO(); $database->setQuery( "SELECT m.*, sum(case when p.published=1 then 1 else 0 end) as cnt" . "\nFROM #__menu AS m" . "\nLEFT JOIN #__menu AS p ON p.parent = m.id" . "\nWHERE m.menutype='$menutype' AND m.published='1' AND m.access <= '$my->gid'" . "\nGROUP BY m.id ORDER BY m.parent, m.ordering "); } $rows = $database->loadObjectList( 'id' ); echo $database->getErrorMsg(); //work out if this should be highlighted $sql = &JFactory::getDBO(); $sql->setQuery( 'SELECT m.* FROM #__menu AS m WHERE menutype='.$menutype.' AND m.published=1'); $query = 'SELECT m.* FROM #__menu AS m WHERE menutype='.$menutype.' AND m.published=1'; $database->setQuery( $query ); $subrows = $database->loadObjectList( 'id' ); $maxrecurse = 5; $parentid = $Itemid; //this makes sure toplevel stays hilighted when submenu active while ($maxrecurse-- > 0) { $parentid = getParentRow($subrows, $parentid); if (isset($parentid) && $parentid >= 0 && $subrows[$parentid]) { $hilightid = $parentid; } else { break; } } // I think nav-wrapper is obsolete and can be removed. See comment in suckerfiss.css echo "<div id=\"cssMenu1\" class=\"horizontal\">"; $indents = array( // block prefix / item prefix / item suffix / block suffix array( "<ul class=\"menu\">", "<li>" , "</li>", "</ul>" ), ); // establish the hierarchy of the menu $children = array(); // first pass - collect children foreach ($rows as $v ) { $pt = $v->parent; $list = @$children[$pt] ? $children[$pt] : array(); array_push( $list, $v ); $children[$pt] = $list; } // second pass - collect 'open' menus $open = array( $Itemid ); $count = 20; // maximum levels - to prevent runaway loop $id = $Itemid; while (--$count) { if (isset($rows[$id]) && $rows[$id]->parent > 0) { $id = $rows[$id]->parent; $open[] = $id; } else { break; } } $class_sfx = null; mosRecurseListMenu( 0, 0, $children, $open, $indents, $class_sfx, $hilightid ); echo "<br/>"; ?> <script type="text/javascript"> <!-- var obj_cssMenu1 = new CSSMenu("cssMenu1"); obj_cssMenu1.setTimeouts(400, 200, 800); obj_cssMenu1.setSubMenuOffset(0, 0, 0, 0); obj_cssMenu1.setHighliteCurrent(true); obj_cssMenu1.setAnimation('none'); obj_cssMenu1.show(); //--> </script> <?php echo "</div>"; } /** * Utility function to recursively work through a vertically indented * hierarchial menu */ //function sefRelToAbs($value) { //return JRoute::_($value); //} function mosRecurseListMenu( $id, $level, &$children, $open, &$indents, $class_sfx, $highlight ) { global $Itemid; global $HTTP_SERVER_VARS, $mosConfig_live_site; if (@$children[$id]) { $n = min( $level, count( $indents )-1 ); echo $indents[$n][0]; foreach ($children[$id] as $row) { switch ($row->type) { case 'separator': // do nothing $row->link = "seperator"; break; case 'url': if ( eregi( 'index.php\?', $row->link ) ) { if ( !eregi( 'Itemid=', $row->link ) ) { $row->link .= '&Itemid='. $row->id; } } break; default: $row->link .= "&Itemid=$row->id"; break; } $li = "\n".$indents[$n][1] ; $current_itemid = trim( JArrayHelper::getValue( $_REQUEST, 'Itemid', 0 ) ); if ($row->link != "seperator" && $current_itemid == $row->id || $row->id == $highlight || (sefRelToAbs( substr($_SERVER['PHP_SELF'],0,-9) . $row->link)) == $_SERVER['REQUEST_URI'] || (sefRelToAbs( substr($_SERVER['PHP_SELF'],0,-9) . $row->link)) == $HTTP_SERVER_VARS['REQUEST_URI']) { $li = "<li>"; } echo $li; echo mosGetLink( $row, $level, $class_sfx ); mosRecurseListMenu( $row->id, $level+1, $children, $open, $indents, $class_sfx, "" ); echo $indents[$n][2]; } echo "\n".$indents[$n][3]; } } function getParentRow($rows, $id) { if (isset($rows[$id]) && $rows[$id]) { if($rows[$id]->parent > 0) { return $rows[$id]->parent; } } return -1; } /** * Utility function for writing a menu link */ function mosGetLink( $mitem, $level, $class_sfx='' ) { global $Itemid, $mosConfig_live_site; $txt = ''; $mitem->link = str_replace( '&', '&', $mitem->link ); if (strcasecmp(substr($mitem->link,0,4),"http")) { $mitem->link = sefRelToAbs($mitem->link); } switch ($mitem->browserNav) { // cases are slightly different case 1: // open in a new window if ($mitem->cnt > 0) { if ($level == 0) { $txt = "<a target=\"_window\" href=\"$mitem->link\">$mitem->name</a>"; } else { $txt = "<a target=\"_window\" href=\"$mitem->link\">$mitem->name</a>"; } } else { $txt = "<a href=\"$mitem->link\" target=\"_window\" >$mitem->name</a>\n"; } break; case 2: // open in a popup window if ($mitem->cnt > 0) { if ($level == 0) { $txt = "<a href=\"#\" onClick=\"javascript: window.open('$mitem->link', '', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=780,height=550');\" class=\"$menuclass\">$mitem->name</a>\n"; } else { $txt = "<a href=\"#\" onClick=\"javascript: window.open('$mitem->link', '', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=780,height=550');\" class=\"$menuclass\">$mitem->name</a>\n"; } } else { $txt = "<a href=\"#\" onClick=\"javascript: window.open('$mitem->link', '', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=780,height=550');\" class=\"$menuclass\">$mitem->name</a>\n"; } break; case 3: // don't link it if ($mitem->cnt > 0) { if ($level == 0) { $txt = "<a>$mitem->name</a>"; } else { $txt = "<a>$mitem->name</a>"; } } else { $txt = "<a>$mitem->name</a>\n"; } break; default: // formerly case 2 // open in parent window if (isset($mitem->cnt) && $mitem->cnt > 0) { if ($level == 0) { $txt = "<a href=\"$mitem->link\">$mitem->name</a>"; } else { $txt = "<a href=\"$mitem->link\"> $mitem->name</a>"; } } else { $txt = "<a href=\"$mitem->link\">$mitem->name</a>"; } break; } return $txt; } ?>
Offline
@Minio: święta racja.
@up: jak dla mnie to żaden, z tego co przejrzałem ten kod, to generuje on jedynie menu.
BTW: Chodzi Ci o tytuł zawarty w
<title></title>
??
Offline
Tak, walczę z zawartością TITLE.
Ja też kilka razy przeszukałem menu.php i nie znalazłem tam niczego co mogłoby
generować TITLE.
To jest cały HEAD w moim index.php:
<head> <jdoc:include type="head" /> <meta http-equiv="Content-Type" content="text/html; <?php echo _ISO; ?>" /> <?php if ( $my->id ) initEditor(); require( "templates/".$this->template . "/menu.php"); //mosShowListMenu('topmenu'); require( "templates/".$this->template . "/cssloader.php");?> <link rel="stylesheet" href="templates/<?php echo $this->template ?>/css/template_<?php echo $font_color;?>.css" type="text/css" /> <link rel="stylesheet" href="templates/<?php echo $this->template ?>/favicon.ico"/> <link rel="stylesheet" href="templates/<?php echo $this->template ?>/css/general_<?php echo $font_color;?>.css" type="text/css" /> <link href="templates/<?php echo $this->template?>/css/horizontal_<?php echo $font_color;?>.css" rel="stylesheet" type="text/css"/> <script language="javascript" src="templates/<?php echo $this->template ?>/js/animation.js" type="text/javascript"></script> <script language="javascript" src="templates/<?php echo $this->template ?>/js/cssmenus.js" type="text/javascript"></script> <!--[if lte IE 6]> <link href="templates/<?php echo $this->template ?>/css/ieonly.css" rel="stylesheet" type="text/css" /> <![endif]--> <?php if($this->countModules('left and right') == 0) $contentwidth = "100"; if($this->countModules('left or right') == 1) $contentwidth = "80"; if($this->countModules('left and right') == 1) $contentwidth = "60"; ?> <!--<?php if($this->get('template_width') == 0) { ?> <style type="text/css"> #wrap {width:960px;} </style> <?php } ?> <?php if($this->get('template_width') == 1) { ?> <style type="text/css"> #wrap {width:960px;} </style> <?php } ?> <?php if($this->get('template_width') == 2) { ?> <style type="text/css"> #wrap {min-width:760px;max-width:960px;width: auto !important;width:960px;} </style> <?php } ?>--> </head>
Nie wiem gdzie szukać moich TITLE, META.
Podejrzewam:
<head> <jdoc:include type="head" /> <meta http-equiv="Content-Type" content="text/html; <?php echo _ISO; ?>" />
Co robi ten fragment, a szczególnie ostatnia linia?
EDIT
Znalazłem plik head.php, tam są tagi TITLE i META. Będę walczył :)
Ostatnio edytowany przez Zyong (2008-03-27 20:46:26)
Offline
Przy okazji znalazłem małego buga w skórce której używasz. W kodzie index.php masz:
<jdoc:include type="head" />
które wg http://joomlasite.net powinno generować nagłówki od wersji 1.5, a z drugiej masz w nim zbyteczny (wg http://www.joomlasite.net/blog/index.php/2007/09/06/szablony-w-joomla-15-cz-i-indexphp/) fragment:
<meta http-equiv="Content-Type" content="text/html; <?php echo _ISO; ?>" />
Sprawdziłem zresztą tę skórkę na stronie autorów i ów fragment jest naprawdę zbyteczny. Przez niego w sekcji head znajdują się dwie deklaracje "Content-Type" z czego ta druga jest oczywiście niepoprawna:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> (…) <meta http-equiv="Content-Type" content="text/html; _ISO" />
Pozdr.
Offline
Time (s) | Query |
---|---|
0.00015 | SET CHARSET latin2 |
0.00009 | SET NAMES latin2 |
0.00148 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.144.6.29' WHERE u.id=1 |
0.00129 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.144.6.29', 1732254429) |
0.00067 | SELECT * FROM punbb_online WHERE logged<1732254129 |
0.00085 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=11001 AND t.moved_to IS NULL |
0.00005 | SELECT search_for, replace_with FROM punbb_censoring |
0.00292 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=11001 ORDER BY p.id LIMIT 0,25 |
0.00122 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=11001 |
Total query time: 0.00872 s |