WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   redundante links als inaktiv setzen (http://www.wcm.at/forum/showthread.php?t=200127)

wallhall 28.09.2006 10:34

redundante links als inaktiv setzen
 
also, ich möchte den link der aktuellen seite als nicht aktiv setzen. dabei werden frames mit div-elementen simuliert und mit $_GET['lalala'] übergeben.

blöderweise funktioniert es aber nicht. muss ich da etwas besonderes beachten?

jak 28.09.2006 19:00

Bei der Beschreibung kennt sich keiner aus.

lg,
jak

wallhall 29.09.2006 08:09

Zitat:

Original geschrieben von jak
Bei der Beschreibung kennt sich keiner aus.

lg,
jak

:D

ok, ich versuch's nochmal
ich hab eine tabellenzeile mit versch. links, aufgebaut durch eine foreach-schleife. dabei guck ich ob die geladene seite einem link entspricht - falls ja wird er nicht verlinkt.

soweitsogut, die seiten die geladen werden sollen wenn ich einen link anklick, hab ich in einen array liegen, mit dem parameter der übergeben werden soll. quasi ala 3-spalten-layout von quakenet.

die geladene seite soll also keinen aktiven link haben, und genau das funktioniert nicht. deshalb die frage: wie muss ich die seite übergeben, dass diese erkannt wird und der link inaktiv ist??

jak 29.09.2006 09:45

Wie bestimmst du im PHP Skript welcher Inhalt angezeigt wird? Das steht doch sicher in irgendeiner Variablen. Wieso verwendest du nicht die?
Poste eventuell mal deinen Code.

jak

wallhall 29.09.2006 11:05

dafür verwende ich zwei ass. arrays.
eines mit den zu übergebenden werten für die foreach-schleife, das andere mit den url's der einzelnen seiten:

<?php

$menue = array(
"Neuigkeiten" => "index.php?geladene_seite=neues",
"was anderes" => "index.php?geladene_seite=wasanderes",
"irgendwas" => "index.php?geladene_seite=irgendwas",
);
$dateien = array();
$dateien['neues'] = "neues.php";
$dateien['wasanderes'] = "wasanderes.html";
$dateien['irgendwas'] = "irgendwas.html";

echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml/DTD/xhtml1-transitional.dtd\">\n";
echo "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n";

echo "<head>\n";
echo "<meta name=\"author\" content=\"leer\">\n";
echo "<meta name=\"keywords\" content=\"leer\">\n";
echo "<meta name=\"date\" content=\"leer\">\n";
echo "<meta name=\"robots\" content=\"index\">\n";
echo "<meta name=\"robots\" content=\"follow\">\n";
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"formate.css\">\n";
echo "<title>$titel</title>\n";
echo "</head>\n";

echo "<body>\n";

echo " <div id=\"root\">\n";

echo " <div id=\"Einleitung\">\n";
echo " <h1>$einleitung</h1>\n";

echo "<table width=\"100%\">\n";
echo "<tr>\n";
foreach($menue as $eintrag => $datei){
if ($datei == basename($_SERVER['PHP_SELF'])) echo "<td align=\"center\" bgcolor=\"#00ff00\">$eintrag</td>";
else echo "<td align=\"center\" bgcolor=\"#c0c0c0\"><a href=\"$datei\">$eintrag</a></td>";
}
echo " </tr>\n";
echo " </table>\n";
echo "</br>\n";
echo " </div>\n";


echo " <div id=\"Inhalt\" style=\"background-image:url(nonixda.jpg);\">\n";
if(isset($_GET['geladene_seite']) AND isset($dateien[$_GET['geladene_seite']])) {
include $dateien[$_GET['geladene_seite']];
} else {
include $dateien['neues'];
}
echo " </div>\n";

echo " <br style=\"clear:both;\" />\n";
echo " </div>\n";

echo "</body>\n";
echo "</html>\n";

?>

wallhall 01.10.2006 14:26

wird meine frage immer noch nicht verstanden oder weiß einfach keiner eine antwort?:confused:

xpla 01.10.2006 14:35

Naja, ich versteh das mal so,

die aktuelle Seite soll nicht als Link ausgegeben werden, innerhalb einer Seitennavigation, vulgo "pagination".

wallhall 01.10.2006 15:40

@xpla, genau darum geht es mir. nur funktioniert es bei mir nicht, der link bleibt aktiv
möglicherweise liegt es daran, wie ich den wert übergebe?

jak 01.10.2006 17:55

Zitat:

Original geschrieben von wallhall
wird meine frage immer noch nicht verstanden oder weiß einfach keiner eine antwort?:confused:
Dochdoch, aber manche Leute lesen halt nicht alle 15min neue posts ;)

Zum Thema:
$_SERVER['PHP_SELF'] liefert nur den Pfad des Aufrufs, nicht die Parameter (also alles vor dem ?). So wie du das willst funktioniert's nicht.

Ich würd' vorschlagen das ganze menu Array ein bischen anders zu organisieren:
Code:

$menue = array(
  'neues' => array(
    'title' => 'Neuigkeiten',
    'file' => 'neues.php',
    'path' => 'index.php?geladene_seite=neues'
  ),
  wasanderes => array(
    'title' => 'was anderes',
    'file' => 'wasanderes.html',
    'path' => 'index.php?geladene_seite=wasanderes'
  ),
  usw...
);

dein Menü kannst du dann mit:
Code:

foreach($menue as $key => $val){
  if ($key == $_GET['geladene_seite']) {
    //inaktiver Eintrag
  } else {
    //aktiver Eintrag
  }
}

zusammenbauen.
Das Include geht dann mit inlude($menue[$_GET['geladene_seite']]['file'])
Da deine Seitennamen nach einem bestimmten Schema aufgebaut sein müssen könntest du dir den 'path' Eintrag im $menue auch sparen und den link einfach mit
echo ''.$val['title'].'';
bauen.

jak

wallhall 02.10.2006 11:39

hallo @jak,

danke für deine antwort und den lösungsvorschlag . ich hab mir das angeschaut und getestet - funktioniert aber nicht.
mir ist aufgefallen dass ich das array im array bei der schleife gar nicht auslesen kann, oder verstehe ich da etwas falsch? daher wird auch keine seite geladen beim anklicken (steht nur array statt dem link, und einige notice-fm kommen: Undefined index: geladene_seite in C:\Programme\xampp\htdocs\index.php on line 62)

bitte um weitere hilfe :D

jak 02.10.2006 19:07

Bei mir funktioniert es so:
Code:

foreach($menue as $key => $val){
      if ($key == $_GET['geladene_seite']) {
        //aktuelle Seite, kein Link
        echo $val['title']."
\n";
      } else {
        //Link
        echo ''.$val['title'].''."
\n";
        //andere Methode:
        echo ''.$val['title'].''."
\n";
      }
    }

//irgendwann nachher das include:
include($menue[$_GET['geladene_seite']]['file']);

jak

wallhall 03.10.2006 11:57

hallo @jak,

verstehe nicht warum es bei dir, nicht aber bei mir funktionert.

die ersten fehler die gekommen sind:
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE,
expecting T_STRING or T_VARIABLE or T_NUM_STRING

na gut, ein wenig gegoogelt und dann die syntax bei mir verändert:
foreach($menue as $key => $val){
if ($key == $_GET['geladene_seite']) {
echo "<td align=\"center\" bgcolor=\"#00ff00\">'".$val['title']."'</td>";
} else {
echo "<td align=\"center\" bgcolor=\"#c0c0c0\"><a href=\"'".$val['path']."'\">'".$val['title']."'</a></td>";
}
}

das hätte dann auch soweit geklappt, nur kommt nun diese:
Notice: Undefined index: geladene_seite in C:\Programme\xampp\htdocs\index.php on line 62

die zeile 62: if ($key == $_GET['geladene_seite']) {

wenn ich trotzdem einen link anklicke wird die seite nicht gefunden
-> ich nehme an es liegt an den anführungszeichen im array 'path'


also keine ahnung was ich machen kann, damit es so läuft wie ich es mir vorstelle.

hilfst du mir noch einmal :D :D

jak 03.10.2006 13:00

Nur zur Erklärung (Vielleicht weißt du das eh schon):
In PHP kann man Strings auf zwei Arten angeben: In doppelten (") oder einfachen(') Hochkommas. Der Unterschied besteht darin, daß bei doppelten Hochkommas Variablen ausgewertet werden:
$myvar = 'Hallo';
echo 'Ich sage: $myvar';
echo "Ich sage: $myvar";
Ausgabe:
Ich sage: $myvar
Ich sage: Hallo

Die Notice bekommst du, wenn du zum ersten mal die Seite aufrufst (daher kein ?geladene_seite=...). Wenn dich das stört kannst du es durch:
if (isset($_GET['geladene_seite']) && ($key == $_GET['geladene_seite'])) {
ersetzen.

Zu deinem eigentlichen Problem kann ich dir leider nichts sagen. Eventuell Hochkommas im Text die nicht maskiert sind?

Wenn du nichts findest kannst du ja nochmal deinen Code posten.

jak

jak

wallhall 03.10.2006 14:18

das mit dem einfachen oder doppelten hochkomma wusste ich nicht, muss ich übersehen haben. aber danke für die info!
ich werde mir das ganze nochmal in aller ruhe angucken und vielleicht finde ich den fehler.

danke und

wallhall 03.10.2006 16:17

[code]
<?php
$menue = array(
'neues' => array(
'title' => 'Neuigkeiten',
'file' => 'neues.php',
'path' => 'index.php?geladene_seite=neues'
),
'altes' => array(
'title' => 'Altigkeiten',
'file' => 'altes.html',
'path' => 'index.php?geladene_seite=altes'
),
'ausflug_weiten' => array(
'title' => 'Ausflug nach Weiten',
'file' => 'weiten/weiten.php',
'path' => 'index.php?geladene_seite=ausflug_weiten'
),
'fam_' => array(
'title' => 'Familie ',
'file' => 'fam_.html',
'path' => 'index.php?geladene_seite=fam_'
),
);

echo "<table width=\"100%\">\n";
echo "<tr>\n";
foreach($menue as $key => $val){
if ($key == $_GET['geladene_seite']) {
echo "<td align=\"center\" bgcolor=\"#00ff00\">'".$val['title']."'</td>";
} else {
echo "<td align=\"center\" bgcolor=\"#c0c0c0\"><a href=\"'".$val['path']."'\">'".$val['title']."'</a></td>";
}
}
echo " </tr>\n";
echo " </table>\n";
echo "</br>\n";
if(isset($_GET['geladene_seite']) AND ($key == $_GET['geladene_seite'])) {
include($menue[$_GET['geladene_seite']]['file']);
} else {
include $menue['fam_']['file'];
}

?>

das einzige was funktioniert ist die letze include nach dem else, in der schleife werden komischerweise die links alle mit hockkomma dargestellt und beim anklicken wird die seite nicht geladen -> wenn ich die hochkommas aus der adressleiste lösche aber schon

ist das ein problem des arrays oder vom auslesen des arrays?

:heul:

T.dot 03.10.2006 16:44

Das er Anführungszeichen ausgibt ist klar, nachdem du sie ja auch im Sourcecode stehen hast ;)

siehe hier:
PHP-Code:

foreach($menue as $key => $val)
{
  if (
$key == $_GET['geladene_seite']) 
  {
    echo 
"<td align=\"center\" bgcolor=\"#00ff00\">'".
      
$val['title']."'</td>";
  } 
  else 
  {
    echo 
"<td align=\"center\" bgcolor=\"#c0c0c0\"><a href=\"'"
      
$val['path']."'\">'".$val['title']."'</a></td>";
  }


die Zeile:
PHP-Code:

echo "<td align=\"center\" bgcolor=\"#c0c0c0\"><a href=\"'".$val['path']."'\">'".
$val['title']."'</a></td>"

müsste eigentlich so aussehen:
PHP-Code:

echo "<td align=\"center\" bgcolor=\"#c0c0c0\"><a href=\"" $val['path'] . "\">" 
$val['title'] . "</a></td>"

Wenn du uns sagst, wozu du die einfachen Anführunsgzeichen gemacht hast, kann man vl. klären wieso man sie nicht braucht ;)

mfg Thomas

ps: Für alle, die sich intensiver mit PHP auseinandersetzen und größere Seiten planen, würd ich eine Template Enginge wie Smarty empfehlen.

wallhall 03.10.2006 17:01

@t.dot, wenn ich erklären könnte warum ich diese einfachen hochkommas habe, hätte ich sie vermutlich gar nicht :lol:

also hab ich mir selbst ein riesenei gelegt, auch net schlecht :rolleyes:

gut, ich werde es einfach einmal rauslöschen und testen ....

wallhall 03.10.2006 20:54

*seufz*
also die links werden jetzt korrekt dargestellt - das passt zum glück

PHP-Code:

foreach($menue as $key => $val) {
    if (
$key == $_GET['geladene_seite']) {
    echo 
"<td align=\"center\" bgcolor=\"#00ff00\">" $val['title'] . "</td>";
    } else {
        echo 
"<td align=\"center\" bgcolor=\"#c0c0c0\"><a href=\"" $val['path'] . "\">" $val['title'] . "</a></td>";
    }


aber ich kann keine seiten laden. die erste seite im array und die letzte seite im array wird geladen, die restlichen nicht (bleibt auf dem stand der ersten seite)

PHP-Code:

  if(isset($_GET['geladene_seite']) && ($key == $_GET['geladene_seite'])) {
    include(
$menue[$_GET['geladene_seite']]['file']);
} else {
    include (
$menue['neues']['file']);


und ich gib es zu, ich bin noch nicht so der profi ;) ;)

wallhall 04.10.2006 10:13

PHP-Code:

if(isset($_GET['geladene_seite']) && ($key == $_GET['geladene_seite'])) { 

nach dem and, der vergleich ($key == $_GET['geladene_seite'])) war die ursache.
aber wie bekomme ich nun die notice-fm weg?

aber sonst funktioniert alles, daher ein danke :bier: an @jak und @t.dot


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag