Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten Ansicht
  #1  
Alt 30.08.06, 13:46
Benutzerbild von Junior
TYPO3 Forum Team
Administrator
 
Registriert seit: 18.08.04
Ort: Zürich
Alter: 33
Beiträge: 2.796
Junior eine Nachricht über Skype™ schicken
HTML-Template einbinden nach Extension erstellung

Hallo

Ich stehe gerade völlig auf dem Schlauch. Ich habe eine Extension im Kickstarter geschrieben (meine erste) und möchte jetzt ein HTML-Template einbinden. Folgende Fragen habe ich:

1. Wo finde ich die Marker?
2. Wo binde ich im Kickstarter das Template ein?
3. Ist <!-- ###LIST### begin --> und <!-- ###SINGLE### begin --> ein Default-Wert, den ich immer benutzen kann?

Vielen Dank!

Ganz lieben Gruss

Junior
__________________
TYPO3forum.net empfiehlt Domain Factory als Hoster!


Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
Sponsored Links
  #2  
Alt 30.08.06, 13:56
Forum Newbie
 
Registriert seit: 05.04.06
Alter: 27
Beiträge: 43

Sofern ich da nicht irgendwas übersehe bindest du das Template selbst in deinem PHP-Code ein.

z.B

Code:
$tmpl = $this->cObj->fileResource('relativer/Pfad/zu/fileadmin/tmpl.html');
dann steht dir dein template in der variable $tmpl zur verfügung

und du kannst mit
Code:
$partTmpl = $this->cObj->getSubpart($tmpl,'###PART_SOMETHING###');
z.b. Stellen aus deinem Template rausholen die dann in $partTmpl zur Verfügung stehen.

oder z.B. mit

Code:
$sub['###LABEL###'] = $this->pi_getLL('mylabel');
$tmpl = $this->cObj->substituteMarkerInObject($tmpl, $sub,'','');
Label ersetzen

Ich muss nach einiger Arbeit mit dem Typo-Templates übrigens sagen, dass ich eine bessere Template-Engine vorziehen würde, z.B. Smarty was es meines Wissens auch als Modul für Typo gibt.
Dies aber nur als kleine Anregung
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #3  
Alt 30.08.06, 14:01
Benutzerbild von Junior
TYPO3 Forum Team
Administrator
 
Registriert seit: 18.08.04
Ort: Zürich
Alter: 33
Beiträge: 2.796
Junior eine Nachricht über Skype™ schicken

Vielen Dank. Wenn ich die Extension update wird das aber ja wieder überschrieben. Mhm... Dann muss ich das jedesmal von Hand einbinden?

Danke und lieben Gruss
__________________
TYPO3forum.net empfiehlt Domain Factory als Hoster!


Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #4  
Alt 30.08.06, 14:10
Forum Newbie
 
Registriert seit: 05.04.06
Alter: 27
Beiträge: 43

Der Code den ich gepostet habe gehört in das frontendplugin also wahrscheinlich pi1/class.deinextensioname.php.

ich schätze du meinst mit updaten, wenn du im kickstarter was änderst und dort wieder sicherst.

deswegen stehen im kickstarter auch haufenweise hinweise das dieser nicht zur bearbeitung bestehender module gedacht ist, sondern wirklich nur zur erstellugn eines initialen grundgerüstes.
falls du ihn doch auf eine in der entwicklung befindliche extension extension anwendest, achte einfach darauf am ende wo du dann save oder so klickst die von dir geänderten dateien vom schreiben auszunehmen, dies kannst du erledigen, indem du die häckchen vor den von dir geänderten dateien entfernst.

also pi1/class.deinextensioname.php nicht überschreiben lassen.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #5  
Alt 30.08.06, 14:33
Benutzerbild von Junior
TYPO3 Forum Team
Administrator
 
Registriert seit: 18.08.04
Ort: Zürich
Alter: 33
Beiträge: 2.796
Junior eine Nachricht über Skype™ schicken

Zitat:
Zitat von eucstyle
Sofern ich da nicht irgendwas übersehe bindest du das Template selbst in deinem PHP-Code ein.

z.B

Code:
$tmpl = $this->cObj->fileResource('relativer/Pfad/zu/fileadmin/tmpl.html');
dann steht dir dein template in der variable $tmpl zur verfügung

und du kannst mit
Code:
$partTmpl = $this->cObj->getSubpart($tmpl,'###PART_SOMETHING###');
z.b. Stellen aus deinem Template rausholen die dann in $partTmpl zur Verfügung stehen.

oder z.B. mit

Code:
$sub['###LABEL###'] = $this->pi_getLL('mylabel');
$tmpl = $this->cObj->substituteMarkerInObject($tmpl, $sub,'','');
Label ersetzen

Ich muss nach einiger Arbeit mit dem Typo-Templates übrigens sagen, dass ich eine bessere Template-Engine vorziehen würde, z.B. Smarty was es meines Wissens auch als Modul für Typo gibt.
Dies aber nur als kleine Anregung
Danke. Aber sorry, ich habs nicht verstanden. Ich binde das Template ein. OK. Und dann...?

Sorry, kannst du es mir bitte nochmals erklären.

Vielen Dank!!

Ganz lieben Gruss

Junior
__________________
TYPO3forum.net empfiehlt Domain Factory als Hoster!


Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #6  
Alt 30.08.06, 14:50
Forum Newbie
 
Registriert seit: 05.04.06
Alter: 27
Beiträge: 43
Pfeil

template in variable holen:

Code:
$tmpl = $this->cObj->fileResource('relativer/Pfad/zu/fileadmin/tmpl.html');
labels ersetzen:
Code:
$sub['###LABEL1###'] = 'was auch immer für ein text';
$sub['###LABEL2###'] = 'was auch immer für ein text 2';
$tmpl = $this->cObj->substituteMarkerInObject($tmpl, $sub,'','');
anschliesend im der main-funktion
Code:
return $tmpl;
erzeugten content zurückgeben.
und schon wird dein Template mit ersetzen labels, die du natürlich selbst definieren musst, an typo zur ausgabe übergeben.

damit obiges funktioniert muss dein template etwa so aussehne
Code:
###LABEL1###
blablabla
vllt noch mehr bla und ###LABEL2###
das heisst die keys deines ersetzungsarrays ($sub) müssen gleich den labelnamen im template sein.
es gibt keinerlei vordefinierten labels.

nochmal zusammengefasst:
pi1/class.deineextension.php
Code:
class tx_deineextension_pi1 extends tslib_pibase {
 function main($content,$conf){
  $this->conf=$conf;
  $this->pi_setPiVarDefaults();
  $this->pi_loadLL();
  
  // Template in string-variable einlesen
  $this->cObj->fileResource('rel/Pfad/zu/fileadmin/tmpl.html');

  // array erstellen das die zu ersetzenden labels enthält
  $sub['###LABEL1###'] = 'was auch immer für ein text';
  $sub['###LABEL2###'] = 'was auch immer für ein text 2';
  
  // Mittels typo-funktion labels aus array ersetzen lassen:
  $tmpl = $this->cObj->substituteMarkerInObject($tmpl,$sub,'','');
  
  // von deinem plugin erzeugten content an typo zurückliefern:
  return $tmpl;
 }
}
advanced:
um teile des Templates zu bearbeiten oder auszuschneiden musst du den bereich den du ausschneiden willst durch zweimal dasselbe label eingrenzen
z.b.
angenommen dein Template sieht so aus
Code:
###PART_1###
irgendein text eventuell auch mit ###LABEL###
###PART_1###
dann kannst du mittels
Code:
$partTmpl = $this->cObj->getSubpart($tmpl,'###PART_1###');
den String zwischen den beiden ###PART_1###-labels in die Variable $partTmpl einlesen.
diese kannst du nun verändern und anschliessend

durch
Code:
$tmpl = $this->cObj->substituteSubpart($tmpl,'###PART_1###',$partTmpl);
den teil zwischen ###PART_1### und ###PART_1### wieder ersetzen.

ich weiss auch nicht so genau wie ich das genauer erklären soll ohne eine seitenweise abhandlung zu schreiben.
vllt könntest du sonst deine probleme etwas genauer eingrenzen.

Geändert von eucstyle (30.08.06 um 15:03 Uhr).
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #7  
Alt 30.08.06, 19:23
Benutzerbild von Junior
TYPO3 Forum Team
Administrator
 
Registriert seit: 18.08.04
Ort: Zürich
Alter: 33
Beiträge: 2.796
Junior eine Nachricht über Skype™ schicken

Erstamals vielen Dank für deine ausfürhlichen Erklärungen, die mir weitergeholfen haben, jedoch im FE noch keine Ausgabe bringt :sad:

Ich poste jetzt hier mal mein Zwischenergebnis:

Fields Overview (Kickstarter)
Code:
hotelname	Hotel Name		String input		
contact		Contact Person		String input		
address		Address	Text 		area		
plz		Zip-Code		String input		
ort		City			String input		
country		Country			String input		
phone1		Phone 1			String input		
phone2		Phone 2			String input		
fax1		Fax 1			String input		
fax2		Fax 2			String input		
email		E-Mail			Link		
www		WWW			Link		
imagelist	Image (LIST View)	Files images, 1 files
imagesingle	Image (SINGLE View)	Files images, 3 files
priceez	Price 	(Single Room)		String input
pricedouble	Price (Double Room)	String input		
about		About the Hotel		Text area with RTE

Auszug aus der class.tx_t3fhotel_pi1.php
PHP-Code:
require_once(PATH_tslib.'class.tslib_pibase.php');

class 
tx_hotel_pi1 extends tslib_pibase {
 function 
main($content,$conf){
  
$this->conf=$conf;
  
$this->pi_setPiVarDefaults();
  
$this->pi_loadLL();
  
  
// Template in string-variable einlesen
  
$this->cObj->fileResource('/fileadmin/template/hotel-manager.html');

  
// array erstellen das die zu ersetzenden labels enthält
  
$sub['###HOTELNAME###'] = 'hotelname';
  
$sub['###CONTACT###'] = 'contact';
  
$sub['###ADDRESS###'] = 'address';
  
$sub['###PLZ###'] = 'plz';
  
$sub['###ORT###'] = 'ort';
  
$sub['###COUNTRY###'] = 'country';
  
$sub['###PHONE1###'] = 'phone1';
  
$sub['###PHONE2###'] = 'phone2';
  
$sub['###FAX1###'] = 'fax1';
  
$sub['###FAX2###'] = 'fax2';
  
$sub['###EMAIL###'] = 'email';
  
$sub['###WWW###'] = 'www';
  
$sub['###IMAGELIST###'] = 'imagelist';
  
$sub['###IMAGESINGLE###'] = 'imagesingle';
  
$sub['###PRICEEZ###'] = 'priceez';
  
$sub['###PRICEDOUBLE###'] = 'pricedouble';
  
$sub['###ABOUT###'] = 'about';
  
  
// Mittels typo-funktion labels aus array ersetzen lassen:
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###HOTELNAME###','hotelname');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###CONTACT###','contact');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###ADDRESS###','address');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###PLZ###','plz');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###ORT###','ort');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###COUNTRY###','country');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###PHONE1###','phone1');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###PHONE2###','phone2');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###FAX1###','fax1');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###FAX2###','fax2');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###WWW###','www');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###IMAGELIST###','imagelist');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###IMAGESINGLE###','imagesingle');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###PRICEEZ###','priceez');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###PRICEDOUBLE###','pricedouble');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###ABOUT###','about');
  
  
// von deinem plugin erzeugten content an typo zurückliefern:
  
return $tmpl;
 }

Komplette class.tx_t3fhotel_pi1.php
PHP-Code:
<?php
/***************************************************************
*  Copyright notice
*
*  (c) 2005 Antoine Monot, Jr. (Junior) (admin@typo3forum.net)
*  All rights reserved
*
*  This script is part of the TYPO3 project. The TYPO3 project is
*  free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.
*
*  The GNU General Public License can be found at
*  http://www.gnu.org/copyleft/gpl.html.
*
*  This script is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
 * Plugin 'Hotel Manager' for the 't3f_hotel' extension.
 *
 * @author    Antoine Monot, Jr. (Junior) <admin@typo3forum.net>
 */

require_once(PATH_tslib.'class.tslib_pibase.php');

class 
tx_hotel_pi1 extends tslib_pibase {
 function 
main($content,$conf){
  
$this->conf=$conf;
  
$this->pi_setPiVarDefaults();
  
$this->pi_loadLL();
  
  
// Template in string-variable einlesen
  
$this->cObj->fileResource('rel/fileadmin/template/hotel-manager.html');

  
// array erstellen das die zu ersetzenden labels enthält
  
$sub['###HOTELNAME###'] = 'hotelname';
  
$sub['###CONTACT###'] = 'contact';
  
$sub['###ADDRESS###'] = 'address';
  
$sub['###PLZ###'] = 'plz';
  
$sub['###ORT###'] = 'ort';
  
$sub['###COUNTRY###'] = 'country';
  
$sub['###PHONE1###'] = 'phone1';
  
$sub['###PHONE2###'] = 'phone2';
  
$sub['###FAX1###'] = 'fax1';
  
$sub['###FAX2###'] = 'fax2';
  
$sub['###EMAIL###'] = 'email';
  
$sub['###WWW###'] = 'www';
  
$sub['###IMAGELIST###'] = 'imagelist';
  
$sub['###IMAGESINGLE###'] = 'imagesingle';
  
$sub['###PRICEEZ###'] = 'priceez';
  
$sub['###PRICEDOUBLE###'] = 'pricedouble';
  
$sub['###ABOUT###'] = 'about';
  
  
// Mittels typo-funktion labels aus array ersetzen lassen:
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###HOTELNAME###','hotelname');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###CONTACT###','contact');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###ADDRESS###','address');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###PLZ###','plz');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###ORT###','ort');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###COUNTRY###','country');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###PHONE1###','phone1');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###PHONE2###','phone2');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###FAX1###','fax1');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###FAX2###','fax2');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###WWW###','www');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###IMAGELIST###','imagelist');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###IMAGESINGLE###','imagesingle');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###PRICEEZ###','priceez');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###PRICEDOUBLE###','pricedouble');
  
$tmpl $this->cObj->substituteMarkerInObject($tmpl,$sub,'###ABOUT###','about');
  
  
// von deinem plugin erzeugten content an typo zurückliefern:
  
return $tmpl;
 }
}

if (
defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/t3f_hotel/pi1/class.tx_t3fhotel_pi1.php'])    {
    include_once(
$TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/t3f_hotel/pi1/class.tx_t3fhotel_pi1.php']);
}

?>
In meiner FE-Ausgabe erscheint jetzt nichts. Ich habe mich an die PART-Marker noch nicht getraut, brauche sie dann aber später für eine LIST und eine SINGLE View.

Kann mir jemand auf die Sprünge helfen? Ich kenne mich in PHP nur rudimentär aus und dafür reichts schon nicht mehr.

Ganz lieben Gruss

Junior
__________________
TYPO3forum.net empfiehlt Domain Factory als Hoster!



Geändert von Junior (31.08.06 um 08:29 Uhr).
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #8  
Alt 30.08.06, 22:26
Benutzerbild von mstuebner
TYPO3 Forum Team
Moderator
 
Registriert seit: 01.09.04
Ort: 84424 Isen b. Dorfen
Alter: 41
Beiträge: 2.177
mstuebner eine Nachricht über Skype™ schicken

Vergleich mal folgendes mit Deinem Code:
Code:
  // array erstellen das die zu ersetzenden labels enthält
  $sub['###LABEL1###'] = 'was auch immer für ein text';
  $sub['###LABEL2###'] = 'was auch immer für ein text 2';
  
  // Mittels typo-funktion labels aus array ersetzen lassen:
  $tmpl = $this->cObj->substituteMarkerInObject($tmpl,$sub,'','');
Ich tät sagen das Du ein bischen übers Ziel hinausgeschossen bist. ,-)
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #9  
Alt 31.08.06, 08:30
Benutzerbild von Junior
TYPO3 Forum Team
Administrator
 
Registriert seit: 18.08.04
Ort: Zürich
Alter: 33
Beiträge: 2.796
Junior eine Nachricht über Skype™ schicken

Mhm. Aber ich muss doch für jede DB-Feld ein LABEL erstellen!?



Oder missverstehe ich etwas grundlegend?

Ganz lieben Gruss

Junior
__________________
TYPO3forum.net empfiehlt Domain Factory als Hoster!


Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #10  
Alt 31.08.06, 08:57
Benutzerbild von mstuebner
TYPO3 Forum Team
Moderator
 
Registriert seit: 01.09.04
Ort: 84424 Isen b. Dorfen
Alter: 41
Beiträge: 2.177
mstuebner eine Nachricht über Skype™ schicken

Zitat:
Zitat von Junior
Mhm. Aber ich muss doch für jede DB-Feld ein LABEL erstellen!?
Nein, nur für die Daten die Du auch ausgeben willst. Zudem verursacht:
Code:
 $sub['###LABEL1###'] = 'TEXT1';
dass anstelle des LABEL1 eben Dein TEXT1 ausgeben wird, wobei das natürlich nur ein deppiges Beispiel ist, da besser so aussieht:
Code:
// Tierisch komplizierte DB Abfragen deren Ergebniss z.B. in Variable $Feld1 gespeichert wurden:
$sub['###LABEL1###'] = $Feld1;
sodass eben der Wert des Feld1 des Datensatzes Y ausgegeben wird.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
Antwort