php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 05.08.2007, 13:16  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard HTML-Tags und CakePHP

Hallo zusammen,

ich beschäftige mich gerade für den versprochenen Framework-Vergleich-Artikel mit CakePHP. Neben einigen anderen mehr oder weniger negativen Auffälligkeiten sitze ich gerade an dem Problem, eigene Tags erstellen zu wollen. In meinem Framework ist es möglich eigene TagLibs - und als solche verstehe ich die Helper in CakePHP - zu erstellen. Konkreter Anwendungsfall ist die automatisch formatierte Ausgabe eines

Code:
<php:highlight>
  $T = &Singleton::getInstance('benchmarkTimer');
  $T->start('MyEvent');

  //
  // Zu messender PHP-Code
  //

  $T->stop('MyEvent');
</php:highlight>
Code-Blocks als formatierter PHP-Code. Die Logik dazu habe ich bereits implementiert und diese stellt auch keinen Bereich meiner Frage dar.

Frage:
Die eigentliche Frage ist nun, wie ich CakePHP beibringe, den HTML-Code in meinem Template zu parsen und formatiert auszugeben?

Was ich bereits unternommen habe:
- Suchen und Herunterladen der Datei tags.ini.php
- Hinzufügen eines weiteren Tags der Form
Code:
; php:highlight
php_highlight = "<php:highlight>%s</php:highlight>"
- Erzeugen einer Helper-Klasse (PHP_HIGHLIGHTHelper extends Helper)
- Hinzufügen des Helpers in meinem Controller (seite_controller)

Innerhalb des Templates kann ich die Methode test() natürlich verwenden, jedoch parst der AppController von CakePHP diese Tags nicht automatisch.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 05.08.2007, 17:28  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo,

dazu habe ich diesen Artikel gefunden. Ich habe es aber noch nicht ausprobiert...
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline   Mit Zitat antworten
Alt 05.08.2007, 18:42  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo phpdummi,

danke, damit hab ich das hinbekommen. Ist zwar etwas umständlich, da die Jungs das GUI-DOM-Design nicht erklären, aber scheinbar parst CakePHP die Tags immer dann, wenn man einen Helper involviert.
Der Eintrag in der tags.ini.php war nicht relevant, denn ein weiterer Tag (doku:navigation) konnte ich ohne einen solchen Eintrag auch mit einem Helper parsen.

Lösung:
- Einbinden der Widget-Klasse aus deinem Link
- Implementieren einer erweiterten Widget-Klasse
PHP-Code:
<?php
   
require_once(dirname(__FILE__) . DS 'widget_helper.php');

   class 
PHPHighlightWidgetHelper extends WidgetHelper
   
{

      
/**
      *  Tag definieren
      */
      
var $tag = array(
                       
'php:highlight',
                       
'doku:navigation'
                      
);


      function 
tag_php_highlight($attr,$inner_html){

         
// Quelltext highlighten
         // - Zeilenumbrüche am Anfang entfernen
         // - Leerzeichen und Zeilenumbrüche am Ende entfernen
         // - Leerzeichen und Zeilenumbrüche um den kompletten Text entfernen
         
$HighlightedContent highlight_string(trim('<?php'.ltrim(rtrim($inner_html),"\x0A..\x0D").' ?>'),true);

         
// PHP-Anfangstag ersetzen
         
$HighlightedContent str_replace('<font color="#007700">&lt;?</font>','',$HighlightedContent);
         
$HighlightedContent str_replace('<font color="#0000BB">&lt;?php','<font color="#0000BB">',$HighlightedContent);
         
$HighlightedContent str_replace('<font color="#0000BB">php','<font color="#0000BB">',$HighlightedContent);
         
$HighlightedContent str_replace('<font color="#0000BB"></font>','',$HighlightedContent);

         
// PHP-Endtag ersetzen
         
$HighlightedContent str_replace('<font color="#0000BB">?&gt;</font>','',$HighlightedContent);

         
// Code im DIV zurückgeben
         
return '<div class="phpcode">'.$HighlightedContent.'</div>';

       
// end function
      
}
   
    
// end class
   
}
?>
- Einbindung des Helpers in den Controller
PHP-Code:
<?php
..
var 
$helpers = array('HTML','PHPHighlightWidget');
..
?>
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 05.08.2007, 20:32  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Schön das es funktioniert. Das dafür eine Helper Instanz erforderlich ist kam mir auch etwas suspekt vor. Da der Blog Eintrag schon etwas älter war, habe ich noch ein wenig im Manual von CakePHP gesucht - ohne Erfolg.

Btw: Funktioniert var $helpers = array('HTML','PHPHighlightWidget'); tatsächlich?
Besser gesagt darf das überhaupt noch funktionieren?
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline   Mit Zitat antworten
Alt 05.08.2007, 21:35  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Grüatzi,

Zitat:
habe ich noch ein wenig im Manual von CakePHP gesucht - ohne Erfolg.
So ging mir das auch. Ich habe nach all dem Try&Error&RTFM immer noch nicht ganz verstanden, wie das Framework intern (GUI-mäßig) arbeitet.

Zitat:
Btw: Funktioniert var $helpers = array('HTML','PHPHighlightWidget'); tatsächlich?
Besser gesagt darf das überhaupt noch funktionieren? :Cool:
Ja, das funktioniert wirklich. Mein Verständnis ist einfach, dass man einen Helper in einem View bekannt machen muss, damit er seine Arbeit tut. Genauer spezifiziert, warum man das tun muss ist im Manual nicht. Ich habe eine Beschreibung erwartet, die mir sagt, welche Methoden wann und zu welchem Zweck ausgeführt werden. Nur dann kann man Erweiterungen einfach implementieren.

However, ich werde mir das noch weiter ansehen und versuchen das ActiveRecord-Thema nochmal anzuschauen.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 05.08.2007, 22:00  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von dr.e.
Grüatzi
Schon im Urlaub? Deserteur!
Zitat:
Zitat von dr.e.
Zitat:
Btw: Funktioniert var $helpers = array('HTML','PHPHighlightWidget'); tatsächlich?
Besser gesagt darf das überhaupt noch funktionieren?
Ja, das funktioniert wirklich. Mein Verständnis ist einfach, dass man einen Helper in einem View bekannt machen muss, damit er seine Arbeit tut. Genauer spezifiziert, warum man das tun muss ist im Manual nicht. Ich habe eine Beschreibung erwartet, die mir sagt, welche Methoden wann und zu welchem Zweck ausgeführt werden. Nur dann kann man Erweiterungen einfach implementieren.
Ich würde sagen so sollte es auch sein, zu viel Magie bringt Unübersichtlichkeit...

PS:
"Besser gesagt darf das überhaupt noch funktionieren? "
Bezog sich mitunter auch auf var (PHP4). War wohl doch nicht so witzig wie ich dachte
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline   Mit Zitat antworten
Alt 05.08.2007, 22:56  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo phpdummi,

Zitat:
Schon im Urlaub? Deserteur!
Nein, nur ein gewöhnlicher Sonntag, den ich damit zubringe mir CakePHP genauer anzusehen. Urlaub gibts erst in 2 Wochen. Dieser wird wohl aber auch nicht erholsamer, schließlich wartet noch die PHP 5 Umstellung und der Vergleichsartikel...


Zitat:
Ich würde sagen so sollte es auch sein, zu viel Magie bringt Unübersichtlichkeit...
Das scheint mir auch deren Philosophie zu sein. Wenn jedoch das Manual auch ohne so viel Magie wäre, fände ich das nicht schlecht.


Zitat:
PS:
Ja ich weiß, das gute PHP 4. Aber soviel ihr auch drüber schimpft, man kann trotz alle dem verdammt komplexe Geschichten damit bauen.


Nächstes Thema: (Ausnahmsweise stelle ich hier mal die Fragen )
Soweit ich dem Manual entnehmen kann ist es nicht möglich mehrere Views innerhalb eines Layouts anzulegen. Sollte das doch so sein, korrigiere mich bitte, aber das Manual spricht immer von einem Layout ([..] your layout [..]). Die Problemstellung die ich dabei habe ist, dass ich für mein Menü auf der linken Seite, meinen Header und mein Menü oben jeweils einen eigenen View erzeugen möchte. Einen denkbaren Umweg stellt das Platzieren mehrere Elemente im "Hauptview", der in einem "Haupt-Layout" steckt dar, was jedoch den Nachteil mit sich bringt, dass ich scheinbar nicht beliebig Views schachteln kann. Oder gibt es doch eine Möglichkeit eine 1:n-Beziehung zwischen Layout und View zu erzeugen?
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 05.08.2007, 23:21  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo Dr.E.,

Mehrere Layouts sind schon möglich, allerdings in etwas anderer Form als du es vielleicht gewohnt bist. (Soll nicht heißen das CakePHP hier einen besseren Ansatz hat, ganz im Gegenteil)

Dem View Kapitel zu entnehmen:
Zitat:
You can create as many layouts as you wish for your Cake site, just place them in the app/views/layouts directory, and switch between them inside of your controller actions using the controller's $layout variable, or setLayout() function.
Im Falle eines Menüs wird, im Gegensatz zum Header und Footer, von Elementen gesprochen.
Zitat:
Ads, help boxes, navigational controls, extra menus, and callouts are often implemented in Cake as elements. An Element is basically a mini-view that can be included in other Views.
Dazu wird im View per $this->renderElement('element'); das gewünschte Element aufgerufen. Sollen Parameter übergeben werden, geschiet dies über ein Array:
PHP-Code:
<?php
echo $this->renderElement('helpbox', array("helptext" => "Oh, this text is very helpful."));
 
?>
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline   Mit Zitat antworten
Alt 06.08.2007, 23:31  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo phpdummi,

das Thema Elements hatte ich gesehen und auch als solches verstanden. Nur leuchtete mir irgendwie nicht ein, dass ich mit CakePHP dann offensichtlich nur 3 echte Struktur-Ebenen habe: Layout, View, Element.

Das bedeutet dann im Umkehrschluss, dass ich in einem Layout nur eine View-Area habe, in die ich Views "klemmen" kann. Innerhalb eines Views kann ich dann mit den Elements weitere Elemente inkludieren.

Der Witz an der Angelegeheit ist nur, dass ich die Elemente nicht im View, sondern im Layout brauche, was offensichtlich nicht möglich ist, da ich zwar mehrere Layouts haben kann, aber nicht mehrere View-Areas in einem Layout. Denn wenn ich die "meherer Elemente innerhalb eines Views"-Geschichte mache, begebe ich mich in echte Abhängigkeit, da ich in einem View nicht beliebig tief strukturieren kann. Es steht mit mit dem implementierten Routing nämlich nur eine Ebene für den Controller (hier /Seite) und eine für die Action (hier /Seite/Startseite) zur Verfügung. Diese nutze ich bereits für den Content-Bereich, da ich ja dort unterschiedliche Contents einbinden will. Da ich nicht gesehen habe, wie man mehrere Views per URL steuert, glaube ich nicht, dass das so funktioniert, wie ich mir das vorstelle, bzw. es sein müsste.

Hilf mir, wenn ich auf dem Schlauch stehe, aber ich vermute, dass das nix wird...
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 07.08.2007, 00:07  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo dr.e.,

ich denke auch das das nix wird. Doch zunächst einmal die Frage ob ich dich überhaupt richtig verstanden habe.
Es existiert ein Basis-Layout indem du Header und Footer untergebracht hast.
In diesem Layout soll aber direkt das Menü eingebunden werden, welches wiederum nicht statisch ist (also eine gewisse Logik bzw. Daten benötigt).
Egal welche Action bzw. View aufgerufen wird, dieses Basis Layout soll immer eingebunden werden.
Soweit korrekt?
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mehrere html tags in sql abfrage THP Datenbanken 11 19.07.2008 12:48
Bestimme HTML Tags mittels RegEx rausfiltern Mano PHP Tipps 2008 6 27.09.2007 14:22
nur erlaubte html tags umwandeln PHP Tipps 2006 2 30.10.2006 13:53
tags uninterpretiert auf html seite ausgeben Crypi HTML, Usability und Barrierefreiheit 4 10.10.2006 13:16
[Erledigt] Validation Problem - HTML Tags in Javascript HTML, Usability und Barrierefreiheit 7 06.03.2006 23:38
HTML Tags als Text ausgeben? cebe PHP Tipps 2006 1 03.03.2006 15:50
html tags filtern mit regex PHP-Fortgeschrittene 11 06.01.2006 11:42
html tags filtern mit regex UND string ergänzen PHP Tipps 2006 14 06.01.2006 02:02
Erkennung von HTML Tags McLain PHP-Fortgeschrittene 4 26.04.2005 10:03
Benutzeingaben in HTML Tags konvertieren PHP Tipps 2005 2 12.03.2005 22:30
Filtern von HTML Tags aus String PHP Tipps 2005 2 18.02.2005 08:44
[Erledigt] Frage: Text abschneiden aber auf html tags achten PHP-Fortgeschrittene 1 19.01.2005 20:46
Formatierung und HTML Tags in mySQL Text via PHP Datenbanken 4 11.01.2005 15:16
[Erledigt] imap_qprint ohne (HTML Tags) PHP-Fortgeschrittene 0 29.09.2004 14:09
[Erledigt] Probleme mit html tags! PHP Tipps 2004 5 28.07.2004 23:37

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
cakephp zeilenumbruch, cakephp html, cakephp zeilenumbrüche, cakephp \helper in element\, cakephp html tags, cakephp html formatiert ausgeben, cakephp $html->, cakephp helper in element, cakephp html tag, cakephp leerzeile, cakephp html code as text, cakephp text to html, cakephp active navi, cakephp elements, cakephp link zeilenumbruch, cakephp view element aufrufen, div container nach benutzeingabe laden, cakephp html site, cakephp helper $this->html->script block, cakephp text ohne html-tags

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:29 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.