TagLib

Hier dreht sich alles um die auf der Webseite veröffentlichten Tutorials. // This forum is all about the APF tutorials.
jprangenberg
Beiträge: 410
Registriert: 16.08.2010, 22:14:54

Re: TagLib

Beitrag von jprangenberg » 19.08.2010, 19:37:00

Code: Alles auswählen

<?php
import('core::database','ConnectionManager');
import('tools::request','RequestHandler');

class content_v1_controller extends base_controller {

   function content_v1_controller(){
   }

   function transformContent(){
      
      // Instanz der Datenbank-Abstraktionsklasse holen
      $cM = &$this->__getServiceObject('core::database','ConnectionManager');
      $driver = &$cM->getConnection('MySQLi');

      // URL-Parameter beziehen
      $page = RequestHandler::getValue('Seite','Startseite');

      // execute textual statement with bind params
      $data = $driver->executeTextStatement('SELECT * FROM demopage_content WHERE PageID = 1;');

      $dataFetch = $driver->fetchData($data);

      $this->__Content = $dataFetch['PageContent'];
      
   }
}
?>
Ich bin sehr stolz auf mich da es nun funktioniert!
Nun habe ich noch eine Frage.
$this->__Content = $dataFetch['PageContent'];
Wieso steht dort "__Content"?
Wie kann ich die Ausgabe in der HTML Datei positionieren?

Was ist der unterschied zwischen executeTextStatement() und executeTextBindStatement()?
Danke im vorraus!

Benutzeravatar
Data
Beiträge: 17
Registriert: 02.02.2010, 13:08:17

Re: TagLib

Beitrag von Data » 20.08.2010, 08:34:53

Hallo xe0n.
xe0n hat geschrieben:Wieso steht dort "__Content"?
Wie kann ich die Ausgabe in der HTML Datei positionieren?
Also die $__Content-Variable ist Bestandteil jeden Documents auf deiner Seite. Darin kann sowohl ein HTML-Quelltext inklusive TagLibs oder einfach ein reiner Text, wie in deinem Fall, gespeichert sein. Um das Resultat deiner MySQL-Abfrage in einer HTML-Struktur an einer bestimmten Stellen anzuzeigen, benötigst du einen <html:placeholder />-Tag:

Code: Alles auswählen

<@controller namespace="sites::testwebsite::pres::documentcontroller" class="content_v1_controller file="content_v1_controller" @>
<html>
  <head>
    <!-- Metainformationen und Seitentitel -->
  </head>
  <body>
    <div id="content">
      <html:placeholder name="content" />
    </div>
  </body>
</html>
So könnte im einfachsten Fall dein HTML-Template aussehen. Einbinden des Document-Controllers und dann die eigentliche HTML-Struktur inklusive des Platzhalters für deinen Inhalt. Um diesen Platzhalter jetzt mit deinem Inhalt füllen zu können reicht ein einfaches:

Code: Alles auswählen

$this->setPlaceHolder("content", $dataFetch['PageContent']);
Dann musst du aber die Zuweisung an $__Content wieder entfernen, da du sonst dein HTML-Template überschreiben würdest. Mit diesem Prinzip kannst du auch mehrere Platzhalter im Template definieren und jeweils mit den entsprechenden Inhalten versehen.
xe0n hat geschrieben:Was ist der unterschied zwischen executeTextStatement() und executeTextBindStatement()?
Bei der executeTextBindStatement()-Funktion können im Gegensatz zur executeTextStatement()-Funktion Platzhalter in der SQL-Anweisung verwendet werden, die mit den im dritten Parameter angegebenen Werten ersetzt werden. Durch diesen Aufruf werden die Werte so weit ich weiß auch automatisch escaped, d.h. es wird einer SQL-Injection (ungewolltes Einfügen von fremdem SQL-Code über z.B. einen POST-Parameter) vorgebeugt.

Ich hoffe das hat dir erstmal weitergeholfen!

Gruss
Marc

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste