Author Topic: Navigation  (Read 1894 times)

0 Members and 1 Guest are viewing this topic.

Felix

  • Guest
Navigation
on: Fri, 25. March 2005 - 19:59:26
Hallo habe ein kleines Problem,
ich muss für meine Studienarbeit die Seite unseres Studienganges neu machen.#
Ich bin dabei auf vlib gestossen und sehr begeistert davon. Ich habe nur ein Problem. Ich möchte die Seiteninhalte (Text, Bild und news) in der Datenbank speichern und anschliessend im Template integrieren. Das funktioniert soweit. Nun möchte ich aber auch die Navigationslinks aus der datenbank auslesen und die Links setzen. Ich habe mir das so gedacht, dass ich ein 2te Tabelle mache in der die links und eine kat-id ist, über die ich dann die o.g Inhalte auslese. Ich habe nun das Problem, dass ich nicht weiss wie ich das mit dem 2 ten loop mache und ich diese kat-id übergebe, da ich ja eigentlich mich immer auf meiner index.php befinde, die nur um  ?kat_id=.. erweitert wird. Oder funktioniert das so nicht wie ich es mir denke. Über ein bsp wäre ich sehr dankbar. hab bis jetzt nichts passendews gefunden und ich hab auch ein bischen zeitdruck, da ich nächste woche donnerstag alles abgeben muss.

Vieln Dank schonmal,

Gruss FElix

futzinator

  • Guest
Navigation
Reply #1 on: Fri, 25. March 2005 - 23:31:00
Hi probiers mal so

Code: [Select]
//Daten auslesen
sReadData = mysql_querySELECT * FROM DATABASE;

//Array vorbereiten
sBuildArray = array;
whilesData = mysql_fetch_ararysReadData {
   array_pushsBuildArray,
      array
          sLink = sDatasLink;
          nId = sDatanId;
          sName = sDatasName;
      
   ;
}
tmpl_example-setLoopsArray, sBuildArray;

im Template

<tmpl_loop name=sArray>
<A HREF="{tmpl_var name=sLink}?id={tmpl_var name=nId}">{tmpl_var name=sName}</A><BR>
</tmpl_loop>

Hoffe das hilft dir und ich habe nicht alles umsonst getippt :-)
Last Edit: Sat, 26. March 2005 - 11:24:16 by ClausVB

Felix

  • Guest
Navigation
Reply #2 on: Sat, 26. March 2005 - 13:34:00
Vielen Dank,
habs ein bißchen verändert
Code: [Select]
?php
require_once vlibTemplate.php;
tmpl = new vlibTemplatetemplates/template.htm;
connect = mysql_connectlocalhost, **, **;
//Daten auslesen
mysql_select_dbhandelec;
sReadData = mysql_querySELECT link, kat_id FROM navi;

//Array vorbereiten
sBuildArray = array;
while sData = mysql_fetch_arraysReadData {
  array_pushsBuildArray,
     array
         sLink = sDatalink,
         nId = sDatakat_id
    
  ;
}
tmpl-setLoopsArray, sBuildArray;
tmpl-pparse;
 ?

und so läufts jetzt. Mein Problem ist aber, kann ich nun einen weiteren Loop machen, indem ich sage, er soll anhand der übergebenen ID die Daten aus einer anderen Tabelle auslesen und dann im Template an anderer Stelle ausgeben. ich bekomme dass nicht hin, weil ich muss ja eine If-Schleife bauen, dass beim ersten seitenaufruf, der Index.php ist ja die id="" weil ja nichts übergeben wird und dieses haut irgendwie nicht hin.
Vielen Dank auf jeden Fall nochmal.

Gruss Felix

Offline ClausVB

  • Administrator
  • Hero Member
  • *****
  • Posts: 566
    • Homepage: clausvb.de
Navigation
Reply #3 on: Sat, 26. March 2005 - 13:52:50
Ich würde das anders machen:

Anstatt

Code: [Select]
//Array vorbereiten
sBuildArray = array;
while sData = mysql_fetch_arraysReadData {
 array_pushsBuildArray,
    array
        sLink = sDatalink,
        nId = sDatakat_id
    
 ;
}
tmpl-setLoopsArray, sBuildArray;
würde ich die Methode "setdbloop" verwenden.

Code: [Select]
sReadData = mysql_querySELECT link, kat_id FROM navi;
tmpl-setdbloopsArray, sReadData;

Für die anderen Tabellendaten nimmst Du dann ebenfalls SETDBLOOP. ARRAY_PUSH ist nur dann nötig, wenn man die Daten aus der Datenbank verändern oder manipulieren möchte. Das tust Du aber gar nicht.

Dein vollständiges Beispiel könnte also so aussehen:

Code: [Select]
result_link_katid = mysql_querySELECT link, kat_id FROM navi;
tmpl-setdbloopresult_link_katid, result_link_katid;

result_was_anderes = mysql_querySELECT link, kat_id FROM was_anderes;
tmpl-setdbloopresult_was_anderes, result_was_anderes;
Beispiele für SETDBLOOP und SETLOOP in Verbindung mit Datenbank-Zugriffen:
http://lamp.clausvb.de/examples/vlibTemplate_db_simple.php
http://lamp.clausvb.de/examples/vlibTemplate_db.php

Gruß
Claus
Last Edit: Sat, 26. March 2005 - 13:54:16 by ClausVB

Guest

  • Guest
Navigation
Reply #4 on: Sat, 26. March 2005 - 15:08:16
@Claus:
Vielen Dank, aber irgendwie komm ich mit deiner Lösung nicht hin, hab das gestern schonmal probiert, bekomme aber da nur ein leeres Feld, mit dem Array_push klappt das. Die darstellung der Seite funktioniert auch. Nun hae ich noch das Problem dass der 2te Loop die daten anhand der übergebenen ID selektieren soll. Dazu hab ich das Probelm, dass ich nicht weiss, wie ich dass mit der Startseite machen soll, da ja hier nur die index.php aufgerufen wird und keine id mit übergeben wird.
Im Endeffekt soll eigentlich alles so ablaufen, dasss ich nur die index.php hab und daran der link zur nächsten Seite index.php?ID=2 lautet und anhand der id=2 der Inhalt aus der DB ausgelsesn wird und dann wieder dargestellt wird.
Bis jetzt sieht meine Datei so aus:
Code: [Select]

?php
require_once vlibTemplate.php;
tmpl = new vlibTemplatetemplates/template.htm;
connect = mysql_connect***, ***, *;
//Daten auslesen
mysql_select_dbhandelec;
sReadData = mysql_querySELECT link, kat_id FROM navi;

//Array vorbereiten
sBuildArray = array;
while sData = mysql_fetch_arraysReadData {
  array_pushsBuildArray,
     array
         sLink = sDatalink,
         nId = sDatakat_id
    
  ;
}
tmpl-setLoopsArray, sBuildArray;

//Daten auslesen
result = mysql_querySELECT text, bild, news FROM cms;
tmpl-setdblooptable_data, result;

tmpl-pparse;
 ?

Meine Idee war so, klappt aber leider nicht:
Code: [Select]
ifid =0 {
result = mysql_querySELECT text, bild, news FROM cms where kat_id=.id;}
else {
result = mysql_querySELECT text, bild, news FROM cms where kat_id=1;};
tmpl-setdblooptable_data, result;
Die Navigation funktioniert, nur der erste Seitenaufruf verursacht folgende Fehlermeldung:

Quote
Warning: Supplied argument is not a valid resource handle in C:ProgrammeTSWApache2htdocshandelec.devlibTemplate.php on line 341
Warning: vlibTemplate Warning: Invalid resource type passed to vlibTemplate::setDbLoop() for Db "MYSQL". in C:ProgrammeTSWApache2htdocshandelec.devlibTemplateerror.php on line 85
Vielen Dank schonmal für die Super Hilfe hier im Forum.
Ich hab gemerkt das vlib die Beste Entscheidung war die ich treffen konnte und werde in Zukunft mein ganzen Seiten mit fiesm System bauen, echt genial.

Gruss Felix
Last Edit: Sat, 26. March 2005 - 16:44:49 by ClausVB

Offline ClausVB

  • Administrator
  • Hero Member
  • *****
  • Posts: 566
    • Homepage: clausvb.de
Navigation
Reply #5 on: Sat, 26. March 2005 - 16:53:47
Du hast einen Fehler in Deinem SELECT-Statement.

Ich gehe jede Wette ein, dass "id" in
Code: [Select]
SELECT text, bild, news FROM cms where kat_id=.idnicht gesetzt ist.

Du programmierst sehr unsauber. Bitte lies Dir mal den PHP Coding Standard durch.

Bitte setze "id" am Anfang des Skriptes mit
Code: [Select]
id = 2;damit Du erkennst wo der Fehler liegt.

Hinweis: Das hier ist kein PHP-Forum, wo Du Hilfe zu PHP bekommst.

Vielleicht hilft Dir auch noch dieser Link weiter:
Datenbank-Zugriff und _GET-Übergabeparameter

Hier kannst Du sehen, wie man so etwas mit vlibTemplate realisieren sollte.

Bitte melde Dich hier im Forum an. Das kannst Du über den Punkt "Register" tun. Nur wenn Du Dich registrierst werde ich Dir weiter helfen.

Gruß
Claus
Last Edit: Sat, 26. March 2005 - 16:54:08 by ClausVB

FelixG

  • Guest
Navigation
Reply #6 on: Sat, 26. March 2005 - 18:06:38
Hallo Claus,

vielen Dank für die Hilfe. Ich hab meinen Fehler gefunden. Die id wird im Link mit übergeben. Ich habe noch nicht sehr viel Erfahrung mit PHP, deshalb auch mein unsauberer Stil. Ich habe bisher von den Standards noch nichts gehört, werde aber ab jetzt versuchen mich daran zu halten. Auf jeden Fall bin ich Dir und futzinator sehr dankbar für die Hilfe und muss meinen tiefsten Respekt vor deinen super Beispielen und Dokumentationen zu der vlib Classe zollen. Vielen Dank nochmal. Hier nun mein fertiges, aber noch unsauber programmiertes script.

Gruss Felix

Code: [Select]
?php
require_once vlibTemplate.php;
tmpl = new vlibTemplatetemplates/template.htm;
connect = mysql_connect**, **, **;
//Navi Daten auslesen
mysql_select_dbhandelec;
sReadData = mysql_querySELECT link, kat_id FROM navi;

// Navi Array vorbereiten
sBuildArray = array;
while sData = mysql_fetch_arraysReadData {
  array_pushsBuildArray,
     array
         sLink = sDatalink,
         nId = sDatakat_id
    
  ;
}
tmpl-setLoopsArray, sBuildArray;

//CMS Daten auslesen
ifid = {
cmsresult = mysql_querySELECT text, bild FROM cms where kat_id=.id;}
else {
cmsresult = mysql_querySELECT text, bild FROM cms where kat_id=1;};
tmpl-setdbloopcms_data, cmsresult;

// Info Daten auslesen
inforesult = mysql_querySELECT info_text FROM infos;
tmpl-setdbloopinfo_data, inforesult;
tmpl-pparse;
 ?
Last Edit: Sat, 26. March 2005 - 18:55:20 by ClausVB

Offline ClausVB

  • Administrator
  • Hero Member
  • *****
  • Posts: 566
    • Homepage: clausvb.de
Navigation
Reply #7 on: Sat, 26. March 2005 - 18:58:18
Wenn Du Lust hast, versuch noch aus
tmpl->setLoop("sArray", sBuildArray);
einen "setdbloop" zu machen und die IF-Strukturen dem Coding Standard anzupassen, dann ist alles perfekt.

Gruß
Claus

FelixG

  • Guest
Navigation
Reply #8 on: Sun, 27. March 2005 - 14:19:38
Hallo,
hab schon wieder mal ein Problem, diesmal auch mit der Navigation und zwar möchte ich die Treemenue Navi von Richard Heyes (Eine Demo) verwenden. Dazu hab ich in mein Template etwas PHP-Code geschrieben und übergebe aus meiner Index die Variablen.

Hier mal meine komplette Index (hab sie noch nicht ganz sauber gemacht, da ich ein bischen Zeitdruck habe)
Code: [Select]
?php
require_once vlibTemplate.php;
tmpl = new vlibTemplatetemplates/template.htm;
connect = mysql_connectlocalhost, root, ;
//Navi Daten auslesen
mysql_select_dbhandelec;

sReadData = mysql_querySELECT link, kat_id, sub1, sub2, sub3 FROM navi;


// Navi Array vorbereiten
sBuildArray = array;
while sData = mysql_fetch_arraysReadData {
  array_pushsBuildArray,
     array
         sLink = sDatalink,
         nId = sDatakat_id,
//         sub1 = sDatasub1,
//         sub2 = sDatasub2,
//         sub3 = sDatasub3
    
  ;
}
tmpl-setLoopsArray, sBuildArray;

//CMS Daten auslesen
ifid = {
cmsresult = mysql_querySELECT text, bild FROM cms where kat_id=.id;}
else {
cmsresult = mysql_querySELECT text, bild FROM cms where kat_id=1;};
tmpl-setdbloopcms_data, cmsresult;

// Info Daten auslesen
inforesult = mysql_querySELECT info_text FROM infos;
tmpl-setdbloopinfo_data, inforesult;
tmpl-pparse;
 ?

So und nun das eigentliche Problem der Kopf meiner Templatedatei:
Code: [Select]
?
if session_is_registeredtree{
session_registertree;}

tmpl_loop name=sArray


require_onceHTML/TreeMenu.php;

//icon         = folder.gif;
//expandedIcon = folder-expanded.gif;

menu  = new HTML_TreeMenu;

node{tmpl_var name=nId}   = new HTML_TreeNodearraytext = {tmpl_var name=sLink}, link = index2.php?id={tmpl_var name=nId}, icon = icon, expandedIcon = expandedIcon, expanded = false;


    menu-addItemnode{tmpl_var name=nId};

    // Create the presentation class
    treeMenu = &new HTML_TreeMenu_DHTMLmenu, arrayimages = ../images, defaultClass = treeMenuDefault;
/tmpl_loop
?

DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN
html
head
und weiter unten wird dann die navi aufgerufen:

Code: [Select]
?treeMenu-printMenu?
Wenn ich das so mache bekomme ich diese Fehlermeldung:

Fatal error: vlibTemplate Error: Parse error
To debug this file, use vlibTemplateDebug instead of vlibTemplate in the class instantiation(i.e. new vlibTemplateDebug). in C:ProgrammeTSWApache2htdocshandelec.devlibTemplateerror.php on line 85

Ich hoffe mal dass dieses System so funktioniert, da ich anderst keine Möglichkeit sehe die Navigation zu machen. Ich habe leider noch sehr wenig erfahrung mit PHP und deshalb hoffe ich auf eure Hilfe. Sollte es kein Problem mit vlib sein, in welchem Forum bekomme ich dann schnell Hilfe?

Vielen Dank schonmal.

Gruss Felix
Last Edit: Sun, 27. March 2005 - 16:58:33 by ClausVB

Offline ClausVB

  • Administrator
  • Hero Member
  • *****
  • Posts: 566
    • Homepage: clausvb.de
Navigation
Reply #9 on: Sun, 27. March 2005 - 17:30:48
Du darfst keinen PHP-Code im Template verwenden. Die Trennung von PHP und HTML ist der Sinn und Zweck von Templates.

Wenn Du ein Tree-Menu mit PHP verwenden möchtest, musst Du IMHO auf Templates verzichten oder sehr gut in modularer PHP-Programmierung sein.

Wenn Du unbedingt ein PHP-Tree-Menü verwenden möchtest, dann würde ich im ersten Schritt auf Templates verzichten. Es gibt aber auch auf http://hotscripts.com JavaScript-Tree-Menus, die sehr brauchbar und mit vlibTemplate kompatibel sind. (Nicht fragen welches, selber suchen)

Ich empfehle, dass Du Dir selbst ein Menü zusammenbaust wie auf
http://barrierefrei.e-workers.de/knowhow_index.php
damit es barrierefrei ist.

Du hast noch nicht einmal versucht sich an die Regeln dieses Forums zu halten ("Postet ein größeres Skript nicht hier (...) postet immer PHP-Code und dazugehöriges Template") und das ärgert mich sehr. Meiner Meinung nach programmierst Du unsauber und hektisch, das macht es mir sehr schwer Deinen Source-Code zu lesen. Gerade Templates sollen aber solche Probleme verhindern. Mein Rat: Versuche erst ohne Templates zu programmieren und eine Gefühl für PHP zu bekommen.

Hilfe zu PHP wirst Du in den folgenden Foren bekommen:
http://spotlight.de/nzforen/php/t/forum_php_1.html
http://dasprovisorium.de/forum/index.php/topic,5861
http://www.php4-forum.de/forum.php3

Gruß
Claus
Last Edit: Sun, 27. March 2005 - 17:38:26 by ClausVB