/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
array igen igen
Fra : rasmus carlsen


Dato : 19-06-06 08:09

Hejsa,

Jeg har efterhånden rodet mig ud i et par tråde, som jeg ikke længe kan
overskue. Jeg prøver lige igen og forfra:

Jeg har et array:

<?php

$validPages = array(
'index',
'dokumenter',
'jura',
);
?>

det henter jeg med:

<?php
if (isset($_GET['p']) && in_array($_GET['p'], $validPages))
{
if(file_exists("includes/" . $_GET['p'] . ".txt"))
{
include("includes/" . $_GET['p'] . ".txt");
}
elseif(file_exists("includes/nyheder/" . $_GET['p'] . ".txt"))
{
include("includes/nyheder/" . $_GET['p'] . ".txt");
}
else
{
include("includes/default.txt");
}
}
else
{
include("includes/default.txt");
}
?>

Fint nok - det virker.

Menuen burde jeg jo generer automatisk, men af forskellige grunde bliver den
lavet manuelt således:

<li> <a href="index.php?p=forsiden">Forsiden</a></li><br />
<li> <a href="index.php?p=dokumenter">Diverse dokumenter</a></li><br />
<li> <a href="index.php?p=jura">juridisk rådgivning</a></li><br />

Fint nok - det virker.

Men ... findes der mon ikke en fiks måde, hvorpå jeg i mit array kan angive
hver sides titel, som vil kunne hentes med noget $title i f.eks.
index-skabelonens <title<</title> og måske også i de enkelte siders
<h1></h1>?

Det kunne jo også bruges i forbindelse med noget dynamisk highligt af det
valgte menupunkt så jeg slipper for det her i hvert menupunkt:

<li<?php if ($thisPage=="jurabummelum")
echo " id=\"currentpage\""; ?>>
<a href="index.php?p=juridisk rådgivning">Page One</a></li><br />

med <?php $thisPage="jurabummelum"; ?> i starten af jura-siden og en anden
linje i starten af en anden side.

ras



 
 
Dan Storm (19-06-2006)
Kommentar
Fra : Dan Storm


Dato : 19-06-06 10:08

rasmus carlsen skrev:
> Jeg har efterhånden rodet mig ud i et par tråde, som jeg ikke længe kan
> overskue. Jeg prøver lige igen og forfra:

Hvis du har problemer med at overskue en tråd, ligger problemet nok i at
du ikke har den nødvendige forståelse for PHP's måde at virke på.
Du har fået flere svar, som også er fyldestgørende, uden du egentlig er
kommet videre.
Men lad os da bare prøve igen og forfra:

> Jeg har et array:
>
> <?php
>
> $validPages = array(
> 'index',
> 'dokumenter',
> 'jura',
> );
> ?>

Lav istedet:
$validPages = array(
'index' => 'Forsiden',
'dokumenter' => 'Diverse dokumenter',
'jura' => 'Juridisk Rådgivning'
);



> det henter jeg med:
Er det hele dit script? Ligger der HTML kode før PHP koden?

> <?php
> if (isset($_GET['p']) && in_array($_GET['p'], $validPages))
> {
> if(file_exists("includes/" . $_GET['p'] . ".txt"))
> {
> include("includes/" . $_GET['p'] . ".txt");
> }
> elseif(file_exists("includes/nyheder/" . $_GET['p'] . ".txt"))
> {
> include("includes/nyheder/" . $_GET['p'] . ".txt");
> }
> else
> {
> include("includes/default.txt");
> }
> }
> else
> {
> include("includes/default.txt");
> }
> ?>
> Menuen burde jeg jo generer automatisk, men af forskellige grunde bliver den
> lavet manuelt således:
Ja, den burde laves af PHP.
Det gør du således:

foreach($validPages as $page => $title)
{
echo '<li><a href="index.php?p='.$page.'">'.$title.'</a></li><br />';
}
>
> Men ... findes der mon ikke en fiks måde, hvorpå jeg i mit array kan angive
> hver sides titel, som vil kunne hentes med noget $title i f.eks.
> index-skabelonens <title<</title> og måske også i de enkelte siders
> <h1></h1>?
Det kommer helt an på hvordan din index.php ser ud?
Desuden, benytter du dig korrekt af <h1> elementet bør det ikke være
nødvendigt at rette <title> elementet for hver side du åbner.

Dit <h1></h1> emne er relativt nemt såfremt du bruger mit array:
echo '<h1>'.$validPages[$_GET['p']].'</h1>';


> Det kunne jo også bruges i forbindelse med noget dynamisk highligt af det
> valgte menupunkt så jeg slipper for det her i hvert menupunkt:
>
> <li<?php if ($thisPage=="jurabummelum")
> echo " id=\"currentpage\""; ?>>
> <a href="index.php?p=juridisk rådgivning">Page One</a></li><br />
>
> med <?php $thisPage="jurabummelum"; ?> i starten af jura-siden og en anden
> linje i starten af en anden side.

Det kræver kun en lille omlægning af menugenerationen. Eksempel:
foreach($validPages as $page => $title)
{
$page == $_GET['p'] ? $current = " id=\"currentpage\"" : $current = "";
echo '<li><a'. $current .'
href="dyn.php?p='.$page.'">'.$title.'</a></li><br />';
}

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

rasmus carlsen (19-06-2006)
Kommentar
Fra : rasmus carlsen


Dato : 19-06-06 10:31


"Dan Storm" <shadyz@_REMOVETHIS_err0r.dk> skrev i en meddelelse
news:44966958$0$74166$edfadb0f@dread14.news.tele.dk...

> Hvis du har problemer med at overskue en tråd, ligger problemet nok i at
> du ikke har den nødvendige forståelse for PHP's måde at virke på.

- det er nemlig helt rigtigt Min vide og erfaring med php er yders
begrænset (men jeg lærer noget det meste af tiden)

> Du har fået flere svar, som også er fyldestgørende, uden du egentlig er
> kommet videre.

- yes (og det piner mig)

> Men lad os da bare prøve igen og forfra:

- heh ja lad os håbe at tredje gang er lykkens gang.

> Lav istedet:
> $validPages = array(
> 'index' => 'Forsiden',
> 'dokumenter' => 'Diverse dokumenter',
> 'jura' => 'Juridisk Rådgivning'
> );

- yes ... det "første" ord er filens navn og det andet er den værdi, der
knytter sig til pågældende fil.


>> det henter jeg med:
> Er det hele dit script? Ligger der HTML kode før PHP koden?

- det ligger i html-koden i en div, der hedder noget i retning af Content
.... det er simpelthen sat ind i index.php der hvor jeg vil have det, der
står i index.txt, dokumenter.txt og jura.txt



>> Menuen burde jeg jo generer automatisk, men af forskellige grunde bliver
>> den lavet manuelt således:
> Ja, den burde laves af PHP.
> Det gør du således:
>
> foreach($validPages as $page => $title)
> {
> echo '<li><a href="index.php?p='.$page.'">'.$title.'</a></li><br />';
> }

- yes ... I know og der er endda rigtig smarte måder at gøre det på. Men
dels vil jeg lige bestå første klasse inden jeg går igang med 2,. klasses
php-pensum. Desuden skal jeg lave en håndfuld forskellige menuer (afhænig af
hvilket faneblad, der er valgt). Derfor vil jeg gerne lave menuerne manuelt.


>> Men ... findes der mon ikke en fiks måde, hvorpå jeg i mit array kan
>> angive hver sides titel, som vil kunne hentes med noget $title i f.eks.
>> index-skabelonens <title<</title> og måske også i de enkelte siders
>> <h1></h1>?

> Det kommer helt an på hvordan din index.php ser ud?
> Desuden, benytter du dig korrekt af <h1> elementet bør det ikke være
> nødvendigt at rette <title> elementet for hver side du åbner.

- ikke forstået ...

> Dit <h1></h1> emne er relativt nemt såfremt du bruger mit array:
> echo '<h1>'.$validPages[$_GET['p']].'</h1>';

- ok, så skriver jeg i min jura.txt fil: echo
'<h1>'.$validPages[$_GET['p']].'</h1>'; efterfulgt er en stang <p>tekst
tekst tekst</p> vil det blive til:
<h1>Juridisk rådgivning</h1><p>tekst tekst tekst</p> ??


>> Det kunne jo også bruges i forbindelse med noget dynamisk highligt af det
>> valgte menupunkt så jeg slipper for det her i hvert menupunkt:
>>
>> <li<?php if ($thisPage=="jurabummelum")
>> echo " id=\"currentpage\""; ?>>
>> <a href="index.php?p=juridisk rådgivning">Page One</a></li><br />
>>
>> med <?php $thisPage="jurabummelum"; ?> i starten af jura-siden og en
>> anden linje i starten af en anden side.
>
> Det kræver kun en lille omlægning af menugenerationen. Eksempel:
> foreach($validPages as $page => $title)
> {
> $page == $_GET['p'] ? $current = " id=\"currentpage\"" : $current = "";
> echo '<li><a'. $current .'
> href="dyn.php?p='.$page.'">'.$title.'</a></li><br />';
> }

- ok ... men jeg vil stadig gerne lave menuerne manuelt. Kan jeg så bare
indsætte: foreach($validPages as $page => $title) foran min manuelle og
sveddryppende menu? Altså:

foreach($validPages as $page => $title)
<li<?php if ($page=="$title")
echo " id=\"currentpage\""; ?>>
<a href="index.php?p=juridisk rådgivning">$title</a></li><br />

Eller hur?


ras
(der godt ved han skylder gruppen en masse god rødvin)



Dan Storm (19-06-2006)
Kommentar
Fra : Dan Storm


Dato : 19-06-06 10:53

rasmus carlsen skrev:
> - yes ... I know og der er endda rigtig smarte måder at gøre det på. Men
> dels vil jeg lige bestå første klasse inden jeg går igang med 2,. klasses
> php-pensum. Desuden skal jeg lave en håndfuld forskellige menuer (afhænig af
> hvilket faneblad, der er valgt). Derfor vil jeg gerne lave menuerne manuelt.
Det trin skal vi have dig over med det samme.
Ved hjælp af arrayets nøgleindeks kan vi også genere dine andre menuer
efter valg af side.

Som sagt skaber vi din hovedmenu (hvis jeg forstod dig ret), vha foreach.
Skal du så have indsat en undermenu kan du bare fortsætte din foreach()
funktion eller eventuelt indsætte undermenuen manuelt. (såfremt skidtet
er statisk og ikke skal benytte sig af dynamisk highligt).

Men, worst case scenario, du har endnu et array som skal benytte sig af
dynamisk hightlighting:
foreach($validPages as $page => $title)
{
$page == $_GET['p'] ? $current = " id=\"currentpage\"" : $current = "";
echo '<li><a'. $current .'
href="dyn.php?p='.$page.'">'.$title.'</a></li><br />';
if($page == $_GET['p'])
{
foreach($submenu as $subpage => $subtitle)
{
//echo links
}
}
}


Hvis det er et andet sted på siden du skal have generet en menu, kan du
indsætte den således:

if($page == $_GET['page'])
{
//echo menu
}

>> Det kommer helt an på hvordan din index.php ser ud?
>> Desuden, benytter du dig korrekt af <h1> elementet bør det ikke være
>> nødvendigt at rette <title> elementet for hver side du åbner.
>
> - ikke forstået ...
Det er søgemaskinerelateret.
Bruges headline elementerne korrekt, kan <title> godt være statisk. Men
er det rent kosmetisk, og du vil have det, så skal du lave din kode helt om.

>> Dit <h1></h1> emne er relativt nemt såfremt du bruger mit array:
>> echo '<h1>'.$validPages[$_GET['p']].'</h1>';
>
> - ok, så skriver jeg i min jura.txt fil: echo
> '<h1>'.$validPages[$_GET['p']].'</h1>'; efterfulgt er en stang <p>tekst
> tekst tekst</p> vil det blive til:
> <h1>Juridisk rådgivning</h1><p>tekst tekst tekst</p> ??
Nemlig, ja.

>>> Det kunne jo også bruges i forbindelse med noget dynamisk highligt af det
>>> valgte menupunkt så jeg slipper for det her i hvert menupunkt:
>>>
>>> <li<?php if ($thisPage=="jurabummelum")
>>> echo " id=\"currentpage\""; ?>>
>>> <a href="index.php?p=juridisk rådgivning">Page One</a></li><br />
>>>
>>> med <?php $thisPage="jurabummelum"; ?> i starten af jura-siden og en
>>> anden linje i starten af en anden side.
>> Det kræver kun en lille omlægning af menugenerationen. Eksempel:
>> foreach($validPages as $page => $title)
>> {
>> $page == $_GET['p'] ? $current = " id=\"currentpage\"" : $current = "";
>> echo '<li><a'. $current .'
>> href="dyn.php?p='.$page.'">'.$title.'</a></li><br />';
>> }

> - ok ... men jeg vil stadig gerne lave menuerne manuelt. Kan jeg så bare
> indsætte: foreach($validPages as $page => $title) foran min manuelle og
> sveddryppende menu?

Foreach kan ikke bruges på den måde.
Hvis det er så vigtigt for dig at få lavet menuen manuelt, så gør således:

$page == $_GET['p'] ? $current = " id=\"currentpage\"" : $current = "";

echo '
<li> <a'.$current.' href="index.php?p=forsiden">Forsiden</a></li><br />
<li> <a'.$current.' href="index.php?p=dokumenter">Diverse
dokumenter</a></li><br />
<li> <a'.$current.' href="index.php?p=jura">juridisk
rådgivning</a></li><br />
';

Så slippet du for den PHP generede menu, men får stadig den dynamiske
hihglighting med.
--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Dan Storm (19-06-2006)
Kommentar
Fra : Dan Storm


Dato : 19-06-06 10:56

Dan Storm skrev:
> Hvis det er et andet sted på siden du skal have generet en menu, kan du
> indsætte den således:
>
> if($page == $_GET['page'])
> {
> //echo menu
> }
ignorer ovenstående; fik vist lige en hjerneblødning....

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

rasmus carlsen (19-06-2006)
Kommentar
Fra : rasmus carlsen


Dato : 19-06-06 11:08


"Dan Storm" <shadyz@_REMOVETHIS_err0r.dk> skrev i en meddelelse
news:449674be$0$74143$edfadb0f@dread14.news.tele.dk...
> Dan Storm skrev:
>> Hvis det er et andet sted på siden du skal have generet en menu, kan du
>> indsætte den således:
>>
>> if($page == $_GET['page'])
>> {
>> //echo menu
>> }
> ignorer ovenstående; fik vist lige en hjerneblødning....

- ok... ikke noget problem. Havde allerede lagt den i gemmerne til senere
brug
r
as



rasmus carlsen (19-06-2006)
Kommentar
Fra : rasmus carlsen


Dato : 19-06-06 11:08


"Dan Storm" <shadyz@_REMOVETHIS_err0r.dk> skrev i en meddelelse
news:449673f3$0$74143$edfadb0f@dread14.news.tele.dk...

> Det trin skal vi have dig over med det samme.

- heh jo tak det vil jeg sætte pris på (og det vil I også)

> Ved hjælp af arrayets nøgleindeks kan vi også genere dine andre menuer
> efter valg af side.
>
> Som sagt skaber vi din hovedmenu (hvis jeg forstod dig ret), vha foreach.
> Skal du så have indsat en undermenu kan du bare fortsætte din foreach()
> funktion eller eventuelt indsætte undermenuen manuelt. (såfremt skidtet er
> statisk og ikke skal benytte sig af dynamisk highligt).

- mjae ... hovedmenuen kommer til at bestå af en række faneblade (formentlig
efter denne guide:
http://www.webdesign101.dk/www/cssmenu/fanebladsmenuer/page1.html) Jeg skal
så lave en skabelon for hver af mine horisontale menupunkter, men det klarer
jeg også ... De vil så være highlightet vha. noget body id="1" osv ...


> Men, worst case scenario, du har endnu et array som skal benytte sig af
> dynamisk hightlighting:

- argh! Jeg magter ikke flere arrays ;-()


> foreach($validPages as $page => $title)
> {
> $page == $_GET['p'] ? $current = " id=\"currentpage\"" : $current = "";
> echo '<li><a'. $current .'
> href="dyn.php?p='.$page.'">'.$title.'</a></li><br />';
> if($page == $_GET['p'])
> {
> foreach($submenu as $subpage => $subtitle)
> {
> //echo links
> }
> }
> }

- jeg vil forsøge mig med det siden hen. Jeg gætter på at dyn.php er den
skabelon, der bruges til at vise siderne. Sikkert en god ide at have en
index for sig selv og så en page.php, hvor alle øvrige sider vises ...

> Hvis det er et andet sted på siden du skal have generet en menu, kan du
> indsætte den således:
>
> if($page == $_GET['page'])
> {
> //echo menu
> }

- ok

> Det er søgemaskinerelateret.
> Bruges headline elementerne korrekt, kan <title> godt være statisk. Men er
> det rent kosmetisk, og du vil have det, så skal du lave din kode helt om.

- ok, så kan jeg sagtens klare mig med en fast og statisk <title>

>> - ok, så skriver jeg i min jura.txt fil: echo
>> '<h1>'.$validPages[$_GET['p']].'</h1>'; efterfulgt er en stang <p>tekst
>> tekst tekst</p> vil det blive til:
>> <h1>Juridisk rådgivning</h1><p>tekst tekst tekst</p> ??

> Nemlig, ja.

- jubiiii! Jeg har forstået noget i dag også

>> - ok ... men jeg vil stadig gerne lave menuerne manuelt. Kan jeg så bare
>> indsætte: foreach($validPages as $page => $title) foran min manuelle og
>> sveddryppende menu?
>
> Foreach kan ikke bruges på den måde.
> Hvis det er så vigtigt for dig at få lavet menuen manuelt, så gør således:

- det er vigtigt på den måde, at skal jeg have lavet det, jeg er igang med
færdig og kunne håndtere det undervejs og bagefter, skal jeg kunne se og
forstå, hvad jeg laver.

> $page == $_GET['p'] ? $current = " id=\"currentpage\"" : $current = "";
>
> echo '
> <li> <a'.$current.' href="index.php?p=forsiden">Forsiden</a></li><br />
> <li> <a'.$current.' href="index.php?p=dokumenter">Diverse
> dokumenter</a></li><br />
> <li> <a'.$current.' href="index.php?p=jura">juridisk
> rådgivning</a></li><br />
> ';
>
> Så slippet du for den PHP generede menu, men får stadig den dynamiske
> hihglighting med.

- ok det prøver jeg. Og så sætter jeg
'<h1>'.$validPages[$_GET['p']].'</h1>'; ind på mine inkluderede filer så
tjekker din fine kodestump og det der står i <h1> også er det, der passer
med sidens filnavn og gør den det bruger den current fra mit stylesheet?

takker

ras



Dan Storm (19-06-2006)
Kommentar
Fra : Dan Storm


Dato : 19-06-06 10:32

Dan Storm skrev:
>> <?php
>> if (isset($_GET['p']) && in_array($_GET['p'], $validPages))
>> {
>> if(file_exists("includes/" . $_GET['p'] . ".txt"))
>> {
>> include("includes/" . $_GET['p'] . ".txt");
>> }
>> elseif(file_exists("includes/nyheder/" . $_GET['p'] . ".txt"))
>> {
>> include("includes/nyheder/" . $_GET['p'] . ".txt");
>> }
>> else
>> {
>> include("includes/default.txt");
>> }
>> }
>> else
>> {
>> include("includes/default.txt");
>> }
>> ?>
Ved nærmere gennemgang, vil ovenstående ikke virke, hvis du bruger mit
array, men det løses nemt ved at skifte funktionen in_array() ud med
array_key_exists().

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

rasmus carlsen (19-06-2006)
Kommentar
Fra : rasmus carlsen


Dato : 19-06-06 11:09


"Dan Storm" <shadyz@_REMOVETHIS_err0r.dk> skrev i en meddelelse
news:44966f1b$0$74169$edfadb0f@dread14.news.tele.dk...
> Dan Storm skrev:
>>> <?php
>>> if (isset($_GET['p']) && in_array($_GET['p'], $validPages))
>>> {
>>> if(file_exists("includes/" . $_GET['p'] . ".txt"))
>>> {
>>> include("includes/" . $_GET['p'] . ".txt");
>>> }
>>> elseif(file_exists("includes/nyheder/" . $_GET['p'] . ".txt"))
>>> {
>>> include("includes/nyheder/" . $_GET['p'] . ".txt");
>>> }
>>> else
>>> {
>>> include("includes/default.txt");
>>> }
>>> }
>>> else
>>> {
>>> include("includes/default.txt");
>>> }
>>> ?>
> Ved nærmere gennemgang, vil ovenstående ikke virke, hvis du bruger mit
> array, men det løses nemt ved at skifte funktionen in_array() ud med
> array_key_exists().

- altså: if (isset($_GET['p']) && array_key_exist($_GET['p'], $validPages))
??

ras



Dan Storm (19-06-2006)
Kommentar
Fra : Dan Storm


Dato : 19-06-06 11:18

rasmus carlsen skrev:
> - altså: if (isset($_GET['p']) && array_key_exist($_GET['p'], $validPages))
> ??

nemlig, ja...
--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

rasmus carlsen (19-06-2006)
Kommentar
Fra : rasmus carlsen


Dato : 19-06-06 11:41


"Dan Storm" <shadyz@_REMOVETHIS_err0r.dk> skrev i en meddelelse
news:449679d4$0$74141$edfadb0f@dread14.news.tele.dk...
> rasmus carlsen skrev:
>> - altså: if (isset($_GET['p']) && array_key_exist($_GET['p'],
>> $validPages)) ??
>
> nemlig, ja...

- mange tak. Nu burde jeg få det til at virke (og når jeg ikke gør vender
jeg frygteligt tilbage). Mange tak for hjælpen.

ras



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste