Zákaz odkazování stránky samu na sebe

Zdravím,

prosim vás o pomoc. Jsem na stránce př. "úvod" a v menu mám odkaz zvýrazněný a:active, vše v pořádku, Ale! na odkaz se dá zase klepnout a přesunout opět na úvod. Jak můžu zrušit toto odkazování stránky samu na sebe? Toto se děje všude, v drobečkové navigaci, v primárních i sekundárním menu i v levé či v pravé části menu. Můžete mi prosim vás poradit? Určitě se to dělá v php, ale netuším jak. Děkuji. L.H.

Profile picture for user Jan Polzer

Myslím, že jednoduše to asi nepůjde. I když... Do template PHP můžete dát tuto funkci:

{syntaxhighlighter brush=php}
function phptemplate_menu_item_link($link) {
if (empty($link['localized_options'])) {
$link['localized_options'] = array();
}
// teď zjistíme, zda je odkaz jiný, než aktuální stránka. Pokud tomu tak je, tak odkaz vypíšeme.
if( strpos($_SERVER['REQUEST_URI'], drupal_get_path_alias($link['href'])) ) {
// text bez odkazu
$output = $link['title'];
}
else{
//text s odkazem
$output = '';
$output .= $link['title'];
$output .= '';
}
return $output;
}
{/syntaxhighlighter}

Píšu to z hlavy bez zkoušení a tedy netvrdím, že to bude fungovat správně.

návštěvník

Dobrý den,
pane Polzere, děkuji, buhužel mi to nefunguje (netuším proč PHP nerozumím :( ) K určité změně ovšem došlo. Zrušilo se mi jakoby a:active (aktivní odkaz se mi neobarvil). Můžu vám poslat výpis celého Template? Třeba to tam něco blokuje. Děkuji. l.lenek

návštěvník

Děkuji, to nevadí :)

<?php
// $Id: template.php,v 1.16.2.2 2009/08/10 11:32:54 goba Exp $

/**
* Sets the body-tag class attribute.
*
* Adds 'sidebar-left', 'sidebar-right' or 'sidebars' classes as needed.
*/
function phptemplate_body_class($left, $right) {
if ($left != '' && $right != '') {
$class = 'sidebars';
}
else {
if ($left != '') {
$class = 'sidebar-left';
}
if ($right != '') {
$class = 'sidebar-right';
}
}

if (isset($class)) {
print ' class="'. $class .'"';
}
}

/**
* Return a themed breadcrumb trail.
*
* @param $breadcrumb
* An array containing the breadcrumb links.
* @return a string containing the breadcrumb output.
*/
function phptemplate_breadcrumb($breadcrumb) {
if (!empty($breadcrumb)) {
return ''. implode(' › ', $breadcrumb) .'';
}
}

/**
* Override or insert PHPTemplate variables into the templates.
*/
function phptemplate_preprocess_page(&$vars) {
$vars['tabs2'] = menu_secondary_local_tasks();

// Hook into color.module
if (module_exists('color')) {
_color_page_alter($vars);
}
}

/**
* Add a "Comments" heading above comments except on forum pages.
*/
function garland_preprocess_comment_wrapper(&$vars) {
if ($vars['content'] && $vars['node']->type != 'forum') {
$vars['content'] = ''. t('Comments') .''. $vars['content'];
}
}

/**
* Returns the rendered local tasks. The default implementation renders
* them as tabs. Overridden to split the secondary tasks.
*
* @ingroup themeable
*/
function phptemplate_menu_local_tasks() {
return menu_primary_local_tasks();
}

function phptemplate_comment_submitted($comment) {
return t('!datetime — !username',
array(
'!username' => theme('username', $comment),
'!datetime' => format_date($comment->timestamp)
));
}

function phptemplate_node_submitted($node) {
return t('!datetime — !username',
array(
'!username' => theme('username', $node),
'!datetime' => format_date($node->created),
));
}

/**
* Generates IE CSS links for LTR and RTL languages.
*/
function phptemplate_get_ie_styles() {
global $language;

$iecss = '';
if ($language->direction == LANGUAGE_RTL) {
$iecss .= '@import "'. base_path() . path_to_theme() .'/fix-ie-rtl.css";';
}

return $iecss;
}
function phptemplate_menu_item_link($link) {
if (empty($link['localized_options'])) {
$link['localized_options'] = array();
}
// teď zjistíme, zda je odkaz jiný, než aktuální stránka. Pokud tomu tak je, tak odkaz vypíšeme.
if( strpos($_SERVER['REQUEST_URI'], drupal_get_path_alias($link['href'])) ) {
// text bez odkazu
$output = $link['title'];
}
else{
//text s odkazem
$output = '';
$output .= $link['title'];
$output .= '';
}
return $output;
}

function phptemplate_menu_item_link($link) {
if (empty($link['localized_options'])) {
$link['localized_options'] = array();
}
// teď zjistíme, zda je odkaz jiný, než aktuální stránka. Pokud tomu tak je, tak odkaz vypíšeme.
if( strpos($_SERVER['REQUEST_URI'], drupal_get_path_alias($link['href'])) ) {
// text bez odkazu
$output = $link['title'];
}
else{
//text s odkazem
$output = '';
$output .= $link['title'];
$output .= '';
}
return $output;
}

Děkuji moc. l.h.
Nový poznatek:
váš kód funguje :), ale tím teď nefunguje nastavení v css
.menu a.active, .menu a:active { background: rgb(51,102,204); color:white; text-decoration:none;}

a když váš kód odmažu a vyčistím paměť, tak obarvení funguje. Stránky mám na lokále, tak vám to nemůžu ukázat. Ale můžu to vyzkoušet na nějakých stránkách na webu. Pokud budete chtít, tedy. Děkuji. l.h.

návštěvník

Tak jsem ještě zjistila, že váš kód nefunguje na primární odkazy. Zkoušela jsem si s tím hrát, ale nějak mi to nejde. Snažila jsem se v tomto řádku:
function phptemplate_menu_item_link($link)
nahradit menu_item_link za menu_default_node_menu, pak za primary-links a poté za menu_primary_menu ale taky to nefungovalo. Pls. Poradíte mi ještě prosim Vás? Myslím, že tyto funkce bude zajímat hodně lidí.
Děkuji. l.lenek

Profile picture for user Jan Polzer

Co se týče toho active, musela byste v PHP doplnit podmínku a dát tam nějaký class. Nemělo by to být složité.

Já toto nechám na ostatních, jestli poradí. Nemůžu tu radit pořád jen já ;-) (a zadarmo)

návštěvník

Dobrý večer, pane Polzere, děkuji za radu. Snažila jsem se o zprovoznění u primárních odkazů, bohužel mi to nefunguje. Místo $link jsem psala $primary_links. Fakt se snažím, ale nerozumím tomu. O napsání podmínky a přiřazení classu jsem taky dost přemýšlela a zkoušela, bohužel nejsem s php na tom vůbec dobře. Když něco hledám na webu a nerozumím tomu, mám problém i s pojmenováním. Proto vás prosím o napsání na l.lenek(zavináč)seznam.cz Za kolik peněz byste mi prosim vás zprovoznil i ty primární odkazy a přiřadil class, který si ovšem už nastyluju sama. Pokud tedy máte o tuto prácičku zájem. Kdyby jste mi prosim Vás mohl dát i věďět, když zájem mít nebudete. Děkuji. l.h.

function phptemplate_menu_item_primary_links($primary_links) {
if (empty($primary_links['localized_options'])) {
$primary_links['localized_options'] = array();
}
// teď zjistíme, zda je odkaz jiný, než aktuální stránka. Pokud tomu tak je, tak odkaz vypíšeme.
if( strpos($_SERVER['REQUEST_URI'], drupal_get_path_alias($primary_links['href'])) ) {
// text bez odkazu
$output = $primary_links['title'];
}
else{
//text s odkazem
$output = '';
$output .= $primary_links['title'];
$output .= '';
}
return $output;
}

Odpovědět

Obsah tohoto pole je soukromý a nebude veřejně zobrazen.

Odesláním komentáře souhlasíte s podmínkami Ochrany osobních údajů

reklama
Moje kniha o CMS Drupal

 

Kniha 333 tipů a triků pro Drupal 9


Více na KnihyPolzer.cz

Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Poslední komentáře
Hosting pro Drupal a WordPress

Hledáte český webhosting vhodný nejenom pro redakční systém Drupal? Tak vyzkoušejte Webhosting C4 za 1200 Kč na rok s doménou v ceně, 20 GB prostoru a automatické navyšováním o 2 GB každý rok. Podrobnosti zde.

@maxiorel na Twitteru

Maxiorel na Twitteru