[PHP] Simpel tekst switch script

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Ruzor
  • Registratie: Februari 2003
  • Niet online

Ruzor

Off with his head man

Topicstarter
Ik ben bezig met een website en die wil ik laten bestaan uit verschillende layers. Om het zo overzichtelijk en klein mogelijk te houden, wil ik een tekst in een layer d.m.v. een php script laten switchen. Deze tekst moet dan in een aparte php-pagina staan.

Dus je hebt een menu (in een layer) die verwijst naar de tekst in een andere layer (b.v. content). Als je dan op een andere link in dat menu klikt, laat het script een andere tekst in diezelfde layer zien.

Waarschijnlijk is het vrij simpel, maar ik zie door de bomen het bos niet meer (include/switch, etc.). Iemand een mooie en "cleane" oplossing hiervoor?

[This is what you get when you mess with us]


Acties:
  • 0 Henk 'm!

  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 08:37

TwoR

Gekleurde stippen

:?

Ik snap niet goed wat je wil. Wil je dat als je op het menuitem klikt dat er dan meteen tekst komt te staan? Of mag de pagina wel reloaden?


Als je gaat reloaden kan je gewoon een switch doen:
PHP:
1
2
3
4
5
6
7
8
9
switch($GET['page'])
{
  case "p1":
    include('pagina1.php');
    break;

  default
    include('404.php');
}


Op deze manier zou je zoiets kunnen doen.

[ Voor 44% gewijzigd door TwoR op 10-10-2006 12:25 ]


Acties:
  • 0 Henk 'm!

  • Ruzor
  • Registratie: Februari 2003
  • Niet online

Ruzor

Off with his head man

Topicstarter
De pagina mag niet reloaden.

Je hebt dus aan de linkerkant een menu. Als je op een menuitem klikt, komt er rechts iets te staan. Als je op een ander menuitem klikt, komt er rechts iets anders te staan.

Wat er rechts komt te staan, wil ik het liefste in 1 php pagina houden. Daar staat dan alle tekst in en daartussen wordt geswitched.

Is het nu wat duidelijker?

[This is what you get when you mess with us]


Acties:
  • 0 Henk 'm!

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 23:59
Als je niet wil reloaden zal je dus alle content in moeten lezen, en met javascript gaan werken. Lijkt me niet echt wenselijk. Of je moet ajax gebruiken, maar technisch gezien ben je dan wel aan het worden er dan wel dingen geladen natuurlijk.

Roomba E5 te koop


Acties:
  • 0 Henk 'm!

  • Electronical
  • Registratie: Juli 2004
  • Laatst online: 18-11-2020
Ruzor schreef op dinsdag 10 oktober 2006 @ 12:25:
De pagina mag niet reloaden.

Je hebt dus aan de linkerkant een menu. Als je op een menuitem klikt, komt er rechts iets te staan. Als je op een ander menuitem klikt, komt er rechts iets anders te staan.

Wat er rechts komt te staan, wil ik het liefste in 1 php pagina houden. Daar staat dan alle tekst in en daartussen wordt geswitched.

Is het nu wat duidelijker?
Dan moet je waarschijnlijk toch aan een AJAX oplossing gaan denken. Deze kan dan, zonder de hele pagina opnieuw te laden, informatie ophalen van de server. Of je moet met Javascript gewoon stukken toevoegen, vervangen, verwijderen. Met PHP alleen kom je er iig niet.

I do not fear computers, I fear the lack of them - Isaac Asimov
"With enough eyeballs, all bugs are shallow" - Eric Raymond


Acties:
  • 0 Henk 'm!

  • smokalot
  • Registratie: Juni 2001
  • Laatst online: 25-05 17:57

smokalot

titel onder

zonder reloaden = asynchroon ==> ajax.

maar je maakt het jezelf wel ingewikkeld.

It sounds like it could be either bad hardware or software


Acties:
  • 0 Henk 'm!

  • Pyrus
  • Registratie: November 2001
  • Laatst online: 11-06 06:22

Pyrus

Hardknock life

Dat kan niet met PHP, aangezien PHP severside draait. Je pagina zal dus altijd moeten reloaden, voordat er iets op verandert. Dit zul je met javascript moeten aanpakken.

LinkedIn


Acties:
  • 0 Henk 'm!

  • Ruzor
  • Registratie: Februari 2003
  • Niet online

Ruzor

Off with his head man

Topicstarter
Ok, the message is clear ;) Maar zo ingewikkeld wil ik het niet maken.

Raden jullie dan aan om toch verschillende pagina's te maken en die d.m.v. een switch te includen (zoals TwoR voorsteld)?

Hoe moet ik me de links in het menu dan voorstellen?

[ Voor 12% gewijzigd door Ruzor op 10-10-2006 12:34 ]

[This is what you get when you mess with us]


Acties:
  • 0 Henk 'm!

  • Observer
  • Registratie: April 2001
  • Nu online
Ruzor schreef op dinsdag 10 oktober 2006 @ 12:25:
De pagina mag niet reloaden.

Je hebt dus aan de linkerkant een menu. Als je op een menuitem klikt, komt er rechts iets te staan. Als je op een ander menuitem klikt, komt er rechts iets anders te staan.

Wat er rechts komt te staan, wil ik het liefste in 1 php pagina houden. Daar staat dan alle tekst in en daartussen wordt geswitched.

Is het nu wat duidelijker?
Dit heeft niet zozeer met PHP te maken maar met CSS en JavaScript. Je kan beide stukken tekst elk in een div tag plaatsen met style "display:none" of "visibility:hidden" zodat ze onzichtbaar zijn en deze vervolgens met JavaScript wel laten zien op basis van de menu keuze.
Je hoeft dus maar 1 keer de pagina te genereren en hoeft ook niks met AJAX oid te doen.

Er zijn vrij veel voorbeelden van online hoe dit moet.

[ Voor 7% gewijzigd door Observer op 10-10-2006 12:38 ]

There are 10 kinds of people in the world: those that understand binary and those that don't


Acties:
  • 0 Henk 'm!

  • Ruzor
  • Registratie: Februari 2003
  • Niet online

Ruzor

Off with his head man

Topicstarter
Dat weet ik ook inderdaad en dat heb ik ook gevonden. Maar het is handiger (voor het bijwerken) om alleen de tekst in aparte pagina's (of een aparte pagina) te zetten en daarvoor wilde ik php gaan gebruiken. Ik had zoiets in gedachten:

menu
<href="rechts.php?onderwerp=producten">producten</>
rechts.php
<div id="tekst">
<?php
include('onderwerp.php');
switch($onderwerpen) {

case "producten":
echo $producten;
break;
}
?>
</div>
onderwerp.php
<?php
$producten = "bla bla bla bla";
?>
Waar zit de denkfout of doe ik te moeilijke en bestaat er een simpelere oplossing?

[ Voor 79% gewijzigd door Ruzor op 10-10-2006 12:50 ]

[This is what you get when you mess with us]


Acties:
  • 0 Henk 'm!

Anoniem: 33810

Zoiets zou heel goed kunnen. Als je met aparte pagina's per link wil gaan werken is de oplossing zelfs nog iets korter:

Menu: blijft hetzelfde, links sturen de pagina via de url mee.

Rechts:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
$onderwerp = $_GET['onderwerp'];

//array met werkelijk bestaande keuzes
$bestaande_onderwerpen = Array('producten','en','de','rest');

if( in_array($onderwerp,$bestaande_onderwerpen) )
{
 include($onderwerp.".php");
}
else
{
  include('404.php');
}
?>


Je losse bestanden (producten.php bijvoorbeeld) worden hierbij ge-include als jij deze hebt toegevoegd in de array van bestanden waaruit de gebruiker mag kiezen (anders kan deze stiekem andere bestanden laten openen, wat je liever niet hebt ;) ).

Zelf geef ik de voorkeur aan losse bestanden per item, anders krijg je straks een hele hoop data in één bestand...en voor je het weet raak je het overzicht kwijt. Of je wilt nog wat extra php gaan toepassen in je losse items, waarbij je weer moeilijke constructies moet toepassen om de output in je variabele te krijgen.

[ Voor 42% gewijzigd door Anoniem: 33810 op 10-10-2006 12:59 ]


Acties:
  • 0 Henk 'm!

  • rewind.
  • Registratie: Oktober 2001
  • Laatst online: 08:16
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php 

include('onderwerp.php');

switch($_GET['onderwerp']) 
{ 
  case "producten": 
    echo $producten;
    break; 

  default 
    include('404.php'); 
} 
?>

Acties:
  • 0 Henk 'm!

  • Fuzzillogic
  • Registratie: November 2001
  • Laatst online: 10-06-2024
Gebruik een template engine. XTemplate is een hele eenvoudige, goed om mee te beginnen. Om HTML door je PHP te gooien (of andersom) is gewoon ranzig.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Nexxennium schreef op dinsdag 10 oktober 2006 @ 12:59:
Gebruik een template engine. XTemplate is een hele eenvoudige, goed om mee te beginnen. Om HTML door je PHP te gooien (of andersom) is gewoon ranzig.
Je hebt geen template engine nodig om PHP en HTML te scheiden. Een template engine maakt het op dit moment waarschijnlijk alleen maar lastiger.

Overigens probeer ik hiermee niet wéér de discussie wel/geen template engine aan te wakkeren, dat is al veel te vaak gebeurd. Ik probeer alleen te zeggen dat het simpelweg niet een oplossing voor alle problemen is, wat veel mensen hier vaak wel lijken te denken. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Observer
  • Registratie: April 2001
  • Nu online
Ruzor schreef op dinsdag 10 oktober 2006 @ 12:38:
Dat weet ik ook inderdaad en dat heb ik ook gevonden. Maar het is handiger (voor het bijwerken) om alleen de tekst in aparte pagina's (of een aparte pagina) te zetten en daarvoor wilde ik php gaan gebruiken.
Dat kan, dan zou je alle opties/bestanden kunnen includen in je php script dat die pagina genereert. Of het script zo maken dat ie alle bestanden in een bepaalde locatie / met een bepaald deel in de filename include. Zonder een reload kom je er namelijk niet met een switch statement.

Requests voor dit soort dingen met AJAX doen is niet handig. Dan belast je de server onnodig want een paar includes zijn veel sneller. Denk nl. ook eens aan de snelheid van de internetverbinding van je gebruikers. Als je 't een keer verstuurt kan een gebruiker tussen menu opties switchen zonder extra verkeer te genereren en/of hoeven te wachten.
AJAX is vooral handig voor kleine updates: adressen of woonplaatsen bij postcodes, real-time standen van wedstrijden, beurskoersen, etc. Alleen als de inhoud van jouw pagina zo up-to-date moet zijn kan je in dit geval beter AJAX gebruiken en dan zou ik het nog alleen voor die specifeke waarden gebruiken die echt veranderen.

There are 10 kinds of people in the world: those that understand binary and those that don't


Acties:
  • 0 Henk 'm!

  • Bram77
  • Registratie: September 2004
  • Laatst online: 10-07-2023
AJAX lijkt me 'the way to go'. Ik ben er nu een paar maanden mee aan het werk en ik kan me geen scripten meer voorstellen zonder AJAX. Het maakt het veel makkelijker gestrucureerd te werken. Helemaal als je zo min mogelijk pagina's wil gebruiken. Heeeeeerlijk :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Bram77 schreef op dinsdag 10 oktober 2006 @ 13:11:
AJAX lijkt me 'the way to go'. Ik ben er nu een paar maanden mee aan het werk en ik kan me geen scripten meer voorstellen zonder AJAX. Het maakt het veel makkelijker gestrucureerd te werken. Helemaal als je zo min mogelijk pagina's wil gebruiken. Heeeeeerlijk :)
IMO gebruik je AJAX helemaal verkeerd als je het voor zoiets simpels als dit wil gebruiken. Denk sowieso eens aan het feit dat je url's nooit copy/pastebaar zullen zijn als je dit probleem met AJAX oplost.

AJAX moet je niet willen gebruiken omdat het "altijd" handig is. Use the best tool for the job, en ga niet altijd dingen gebruiken omdat ze ooit wel eens handig zijn geweest.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Bram77
  • Registratie: September 2004
  • Laatst online: 10-07-2023
Dat is waar, niet copy en paste baar. Toevallig ben ik daar nog niet tegenaan gelopen omdat voor alle applicaties waar ik het in gebruik ingelogd moet worden.

Acties:
  • 0 Henk 'm!

  • Ruzor
  • Registratie: Februari 2003
  • Niet online

Ruzor

Off with his head man

Topicstarter
Nou ik heb het volgende geprobeerd:

index.html
code:
1
2
3
4
5
6
...
<ul id="menu">
    <li><a href="tekst.php?onderwerp=home">Home</a></li>
    <li><a href="tekst.php?onderwerp=producten">Producten</a></li>
</ul>
...


tekst.php
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<html>
<head>
<title></title>
</head>
<body>
<div id="textbox"
style="position:absolute;
    width: 568px;
    left: 180px;
    top: 40px;
    border: 1px solid #000000;">test
<?php
$onderwerp = $_GET['onderwerp'];

//array met werkelijk bestaande keuzes
$bestaande_onderwerpen = Array('home','producten');

if( in_array($onderwerp,$bestaande_onderwerpen) )
{
 include($onderwerp.".php");
}
else
{
  include('404.php');
}
?>
</div>
</body>
</html>


home.php
code:
1
2
3
<?php
$home = "lalalala home";
?>


Maar dit werkt niet :/ In de tekstbox zie ik alleen test en niet hetgene wat b.v. in home.php staat. Wat doe ik hier fout?

[This is what you get when you mess with us]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Zet in home.php eens alleen "lalalala home" zonder verdere PHP-code. Je wil dat wat je include meteen uitgevoerd wordt, waarom zou je het dan in een variabele moeten zetten (die je vervolgens niet eens afdrukt 8)7)?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Ruzor
  • Registratie: Februari 2003
  • Niet online

Ruzor

Off with his head man

Topicstarter
-NMe- schreef op dinsdag 10 oktober 2006 @ 13:49:
Zet in home.php eens alleen "lalalala home" zonder verdere PHP-code. Je wil dat wat je include meteen uitgevoerd wordt, waarom zou je het dan in een variabele moeten zetten (die je vervolgens niet eens afdrukt 8)7)?
Ok die was stom 8)7 Maar bedankt allemaal, het is nu gelukt en ik heb wat meer inzicht gekregen in php (het begin iig) _/-\o_

[This is what you get when you mess with us]


Acties:
  • 0 Henk 'm!

Anoniem: 174951

Ruzor schreef op dinsdag 10 oktober 2006 @ 12:38:
Dat weet ik ook inderdaad en dat heb ik ook gevonden. Maar het is handiger (voor het bijwerken) om alleen de tekst in aparte pagina's (of een aparte pagina) te zetten en daarvoor wilde ik php gaan gebruiken. Ik had zoiets in gedachten:

menu

[...]


rechts.php

[...]


onderwerp.php

[...]


Waar zit de denkfout of doe ik te moeilijke en bestaat er een simpelere oplossing?
Ik denk dat je denkfout zit in het feit dat een <a href=""> een request naar "een" server stuurt (in het geval van http in ieder geval). Wat jij namelijk wil volgens mij, is php variabelen "on demand" hun waarde laten vertonen. Aangezien PHP een server-side script taal is, zal dit dus nooit mogelijk zijn, zonder de server opnieuw de opdracht te geven het php-script uit te voeren en de html-ouput naar jouw browser te sturem.

De enige juiste eenvoudige oplossing is om alle data gelijk in te laden en met behulp van JavaScript en CSS de boel te hiden/unhiden.

[ Voor 15% gewijzigd door Anoniem: 174951 op 10-10-2006 13:55 ]


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017

RSD

Laad alles in in een javascript variable en gebruik javascript om te switchen bij een bepaalde actie

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

RSD schreef op woensdag 11 oktober 2006 @ 11:01:
Laad alles in in een javascript variable en gebruik javascript om te switchen bij een bepaalde actie
Ik geloof dat we er net over uit waren dat Javascript en AJAX hier geen mooie oplossingen zijn. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Anoniem: 174951

-NMe- schreef op woensdag 11 oktober 2006 @ 18:38:
[...]

Ik geloof dat we er net over uit waren dat Javascript en AJAX hier geen mooie oplossingen zijn. ;)
Volgens mij heeft die post waaop je reageerd niet echt je maken met Ajax. Meer met alle content van een pagina in hidden <div>'s laden, en de visibility togglen bij een klik op een knop, ofterwel geen ruggenspraak tussen script en server om nieuwe content op te halen, maar gelijk alles ophalen.

Acties:
  • 0 Henk 'm!

Anoniem: 195096

Is het ook mogelijk om dit binnen een tabel te doen?!
Dus in een cel de links en in een andere cel de inhoud laten zien?!

Ik wil bezoekers op die manier snel een overzicht kunnen geven van de de pagina, die ze d.m.v. de link gaan bekijken, voordat de hele pagina geladen wordt.
Pagina: 1