login  Naam:   Wachtwoord: 
Registreer je!
 Forum

template power

Offline Clemens32 - 22/11/2006 12:07
Avatar van Clemens32PHP interesse Ik ben net begonnen met het werken met templates.
Ik doe dit met template power.
Ik ben nu even iets aan het oefenen en loop ergens tegenaan, misschien kan iemand me helpen.

Ik heb index.tpl:

Deze index.tpl is onderverdeeld in drieën.
links een menustructuur, midden de mainpage en rechts ook een menustructuur.
Nu moet er in het linkergedeelte een aantal verkoopcategoriën uit de database komen te staan.
  1. <table>
  2. <tr>
  3. <td class="td_menu">
  4. <div align="center">
  5. <strong>Verkoop</strong>
  6. </div>
  7. </td>
  8. </tr>
  9. <tr>
  10. <td class="td_menu">
  11. <div align="center">
  12. <a href="winkel/artikel_per_categorie.php">{naam}</a>
  13. </div>
  14. </td>
  15. </tr>


Nu moet {naam} in dit geval uit de database gehaald worden, hoe doe ik dat dan?

Ik moet erbij vertellen dat ik een bestaande site aan het omzetten ben naar templates, dus hieronder heb ik de code hoe het was

  1. <table>
  2. <tr>
  3. <td id="menu">
  4. <table>
  5. <tr>
  6. <td class="td_menu">
  7. <div align="center">
  8. <strong>Verkoop</strong>
  9. </div>
  10. </td>
  11. </tr>
  12. <?php
  13. $sql = "SELECT * FROM categorie_verkoop";
  14. $resultaat = mysql_query($sql) or die (mysql_error());
  15. if (mysql_num_rows($resultaat) > 0) {
  16. while ($rij = mysql_fetch_array($resultaat) ) {
  17.  
  18. echo '<tr>';
  19. echo '<td class="td_menu">';
  20. echo '<div align="left">';
  21. echo '<a href="winkel/artikel_per_categorie.php?id='.$rij['categorie_verkoop_id'].'>'.$rij['naam'].'</a>';
  22. echo '</div>';
  23. echo '</td>';
  24. echo '</tr>';
  25. }
  26. }
  27. ?>

18 antwoorden

Gesponsorde links
Offline Dark_Paul - 22/11/2006 12:49
Avatar van Dark_Paul PHP ver gevorderde Maak een nieuw blok aan, hier genoemd 'cats'.
  1. <!-- START BLOCK : cats -->
  2. <tr>
  3. <td class="td_menu">
  4. <div align="center">
  5. <a href="winkel/artikel_per_categorie.php?id={id}">{naam}</a>
  6. </div>
  7. </td>
  8. </tr>
  9. <!-- END BLOCK : cats -->

in je .tpl-file.
In je PHP-file doe je:
  1. <?php
  2. $sql = "SELECT * FROM categorie_verkoop";
  3. $resultaat = mysql_query($sql) or die (mysql_error());
  4. if (mysql_num_rows($resultaat) > 0) {
  5. while ($rij = mysql_fetch_array($resultaat) ) {
  6. $tpl -> NewBlock('cats');
  7. $tpl -> Assign(Array('verkoop_id' => $rij['categorie_verkoop_id'], 'naam' => $rij['naam']));
  8. }
  9. ?>
Offline Clemens32 - 22/11/2006 13:08 (laatste wijziging 22/11/2006 13:14)
Avatar van Clemens32 PHP interesse ja, ik heb het net geprobeerd en het werkt inderdaad.
verkoop_id moest dn met id worden natuurlijk, want je hebt ook {id} in de template.
Ik heb ook $tpl->printToScreen(); toegevoegd onderaan of is dat niet verplicht?

[edit]
Nu een stapje verder.
In index.tpl zitten meerdere menu's.
Nu wil ik dus ook het menu van verhuur erin zetten
Nu kan ik natuurlijk in de template een nieuw blok aanmaken met een andere naam, maar waar doe ik de verwerking daarvan?
Komt dat dan weer in index.php of moet elke verwerking in een aparte php-pagina?
Offline Gerard - 22/11/2006 13:40
Avatar van Gerard Ouwe rakker Zet deze eens in de global.php in de controllers map. Dit is namelijk een bestand wat controle uitvoert over de template, dit doet hij dan op het globale niveau.

Ik stel ook voor dat je het block van het verkoop menu iets noemt als.
verkoopMenuRij (of salesMenuRow). Zo kan je de rijen van het verkoop menu en het verhuur menu goed uit elkaar houden.
Offline Clemens32 - 22/11/2006 13:44
Avatar van Clemens32 PHP interesse ja ok, dat snap ik.
Dus ik krijg:

templates/index.tpl en
controllers/index.php

maar waar zet ik de verwerking van het verhuurmenu?
Ook in index.php of wordt dat weer een nieuwe php-pagina?
Dat kan ik me namelijk niet voorstellen alleen kan ik niet vinden hoe ik dat dan moet doen.
Offline Gerard - 22/11/2006 13:46
Avatar van Gerard Ouwe rakker
Citaat:
maar waar zet ik de verwerking van het verhuurmenu?


Het verhuurmenu is onderdeel van de index template, deze is overal op de website beschikbaar. Het is dus vanzelfsprekend dat het aanmaken van het menu wordt gedaan door een php pagina die daarvoor bedoelt is (die de controle uitvoert over de global scope) en deze dus ook altijd beschikbaar is.

In jouw geval is dat dus de index.php in de controllers map. (global.php in mijn voorbeeld)
Offline Clemens32 - 22/11/2006 13:52 (laatste wijziging 22/11/2006 13:53)
Avatar van Clemens32 PHP interesse ja ok, dat snap ik.
Maar hoe geef ik dan aan dat het om een ander menu gaat?
Ik moet in onderstaande dus kunnen aangeven dat het om een ander menu gaat.
Moet het dan zoiets worden?

  1. <?php
  2. include "class.TemplatePower.inc.php";
  3.  
  4. $tpl = new TemplatePower("index.tpl");
  5.  
  6. $tpl->prepare();
  7.  
  8. $sql = "SELECT * FROM categorie_verkoop";
  9. $resultaat = mysql_query($sql) or die (mysql_error());
  10. if (mysql_num_rows($resultaat) > 0) {
  11. while ($rij = mysql_fetch_array($resultaat) ) {
  12.  
  13. $tpl->newBlock("verkoopMenuRij");
  14. $tpl->assign(array(
  15. "id" => $rij['categorie_verkoop_id'] ,
  16. "naam" => $rij['naam']
  17. ));
  18.  
  19. }
  20. }
  21.  
  22. $sql = "SELECT * FROM categorie_verhuur";
  23. $resultaat = mysql_query($sql) or die (mysql_error());
  24. if (mysql_num_rows($resultaat) > 0) {
  25. while ($rij = mysql_fetch_array($resultaat) ) {
  26.  
  27. $tpl->newBlock("verhuurMenuRij");
  28. $tpl->assign(array(
  29. "id" => $rij['categorie_verhuur_id'] ,
  30. "naam" => $rij['naam']
  31. ));
  32.  
  33. }
  34. }
  35.  
  36.  
  37. $tpl->printToScreen();
  38. ?>
Offline Gerard - 22/11/2006 13:58
Avatar van Gerard Ouwe rakker Ja, zo moet je dat doen. Je kan die if (mysql_num_rows.... laten vervallen. Tenzij je er een if-statement bij hebt staan heeft die nu namelijk helemaal geen nut. Als er geen rijen staan hoeft hij ook nergens doorheen te loopen namelijk.
Offline Clemens32 - 22/11/2006 14:29
Avatar van Clemens32 PHP interesse Ik snap niet goed wat je met dat laatste bedoeld.

Citaat:
Je kan die if (mysql_num_rows.... laten vervallen


Hoezo? dat is toch een check of er wel data is?

Citaat:
Tenzij je er een if-statement bij hebt staan heeft die nu namelijk helemaal geen nut


Tenzij er wat voor if-statement bij staat?

Citaat:
Als er geen rijen staan hoeft hij ook nergens doorheen te loopen namelijk


Daar is toch juist die mysql_num_rows voor?
Offline Gerard - 22/11/2006 15:25 (laatste wijziging 22/11/2006 15:26)
Avatar van Gerard Ouwe rakker Waarom zou je controleren of er data teruggegeven door MySQL op dat punt? Als MySQL geen rijen teruggeeft zal de while lus niet doorlopen worden en zullen er gewoon geen menu opties worden toegevoegd.

Wanneer er echter gebruik werd gemaakt van een else in je if-statement, dan zou ik het nut er nog wel van inzien. Omdat je dan bijvoorbeeld zelf 1 rij zou kunnen starten met 'Geen categorieën aanwezig'. Maar deze oplossing is hier niet gewenst omdat in je template altijd een link gemaakt dient te worden, die zou dus altijd invalid zijn. Natuurlijk kan je altijd op dit punt ook een block invoeren waarin je dat bericht zet, en dat block alleen maar 1 keer aanroept als er inderdaad geen categorieën zijn.

mysql_num_rows is dus handig om een error weer te geven als er geen rijen teruggegeven worden of als je wilt weergeven hoeveel rijen er teruggegeven zijn door MySQL. Wanneer je dan echter geen bericht neer gaat zetten, maar puur checked of er rijen zijn om doorheen te loopen... dan is het een overbodige functie.
Offline Clemens32 - 22/11/2006 15:52
Avatar van Clemens32 PHP interesse Ja, ik begrijp het inderdaad.
Je hebt gelijk.

Nu wil ik het meteen goed doen.
Hoe moet ik de links dan noemen?

<a href="winkel/artikel_per_categorie.php?id={id}">{naam}</a>

wat gaat dit worden proximus?
Dus naar welke folder gaat dit, includes of een andere?
Offline Gerard - 22/11/2006 15:53
Avatar van Gerard Ouwe rakker Je zal die folder moeten vervangen door de include link natuurlijk
<a href="index.php?pagina=artikel_per_categorie&id={id}">{naam}</a>
Offline Clemens32 - 22/11/2006 16:05
Avatar van Clemens32 PHP interesse ja inderdaad.
natuurlijk.
En dan ga jij me nog even helpen met het zorgen dat het systeem zo wordt omgezet dat ik index.php?pagina= kan gebruiken ?????

  :D :D :D 
Offline Gerard - 22/11/2006 16:07
Avatar van Gerard Ouwe rakker Een include systeem kan je ondertussen zelf al wel maken ;)
Offline Clemens32 - 22/11/2006 16:28
Avatar van Clemens32 PHP interesse hahahaha, je hebt wel erg veel vertrouwen in me.
Ik denk toch dat ik nog wat begeleiding nodig heb hoor.
Ook met de afhandeling van het inloggen.
Ik denk nu dat het beter is om één menu.php te maken en daarin te kijken welke rechten iemand heeft ipv adminmenu.php, gebruikermenu.php, werknemermenu.php enz.
Offline Thomas - 22/11/2006 16:57
Avatar van Thomas Moderator Mijn tutorial komt binnenkort nog wel eens 8).
Offline Clemens32 - 22/11/2006 17:00 (laatste wijziging 23/11/2006 13:42)
Avatar van Clemens32 PHP interesse Ik kan niet wachten 

Nieuwe vraag:
http://www.pastebin.be/3875/

Nu wil ik dat de afhandeling van wie welke opties te zien krijgt in menu.php gan doen.
Dan hoef ik niet voor elke status een ander menu te maken.
Kan dit script niet flink ingekort worden?
Nu snap ik dat dit dus in index.php komt te staan, maar wat zet ik dan in een nieuw blok in index.tpl ?


[update]
http://www.pastebin.be/3877/

Wat komt er dan in het block te staan?

<!-- START BLOCK : MenuLogin -->

@ Wat moet hier komen???

<!-- END BLOCK : MenuLogin -->
[/update]
Offline b4nkr0bz0r - 23/11/2006 13:50 (laatste wijziging 23/11/2006 14:39)
Avatar van b4nkr0bz0r PHP gevorderde Als ik het goed begrijp wil je voor elk soort status een ander menu?
dan moet je dit:
  1. <?php
  2. } elseif (checkIfAdmin()) { include "inc/adminmenu.php";
  3. } elseif (checkIfWerknemer()) { include "inc/werknemermenu.php";
  4. } elseif (checkIfIngelogd()) { include "inc/gebruikersmenu.php";
  5. ?>

vervangen door:
  1. <?php
  2. } elseif (checkIfAdmin()) { $tpl->newBLock('admin');
  3. } elseif (checkIfWerknemer()) { $tpl->newBLock('werknemer');
  4. } elseif (checkIfIngelogd()) { $tpl->newBlock ('ingelogd');
  5. ?>

dan zet je in je bij behoordende TPL file:
[code]<!-- START BLOCK : admin -->
hier je content uit inc/adminmenu.php
<!-- END BLOCK : admin -->[code]
en zo doe je ook die van werknemer en ingelogd...met de benaming as: werknemer, ingelogd.

EDIT: quote vergeten.
Offline Clemens32 - 23/11/2006 15:08
Avatar van Clemens32 PHP interesse Zou iemand voor mij willen kijken of het zo klopt?
Ik kan het niet online controleren namelijk omdat ik het index.php?pagina= systeem er nog in moet zetten.

index.tpl

http://www.pastebin.be/3884/

regels 186 t/m 210 komen nog wat php notaties voor.
Moet je die doormiddel van assign eruit halen?

index.php

http://www.pastebin.be/3885/
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.269s