Zum Inhalt springen

[Tutorial] Eigene PHP-Skripte einbinden

Erstellt am 9. Juni 2003 · 42 Antworten · letzte Antwort am 18. Juli 2006 · Seite 2 von 3

Tags: Frage

Doegi ·

ok, ich hab's:

Der Page-Type "Skript" ist nur verfügbar, wenn die Extension "CSS Styled Content" *nicht* aktiv ist.

Sehr dämlich :-(

hendrik ·

Ich habe mit Hilfe der Tips in diesem Thread meine alten PHP Skripte soweit integriert, die Datenbankabfragen funktionieren, die Ausgabe ist auch ok. Dafür schon mal vielen Dank.
Ich habe aber noch folgendes Problem: Manche dieser Skripte bearbeiten Eingaben des Benutzers weiter, dass heißt, es muss wiederholt aufgerufen werden und Eingaben aus einem Formular auslesen. Leider wird aber immer die Startseite aufgerufen und nicht die Seite mit dem Skript wiederaufgerufen.
Wie kann ich dieses Verhalten verändern?

Vielen Dank schon mal für alle Hinweise
Hendrik

n1gHt ·

Du kannst die CSS Style content auch aktiviert lassen.
Damit du dann SCRIPT als Contentelement angezeigt bekommst öffne die Datei .. ypo3extcss_styled_contentpageTSconfig.txt und kommentiere folgendes aus "CType.removeItems = script, rte".

n1gHt ·

Um Benutzereingaben weiter zu nutzen musst du für die Unterseite eine erweitertes Template anlegen.
Da schreibst dann folgendes rein:

tt_content.script = CASE
tt_content.script {
key.field = select_key
registration_form= PHP_SCRIPT_EXT
registration_form.file = fileadmin/deinOrdner/registration_form.php
}

Dann musst du jeweils in deinen Php-Scripten die Pfade anpassen und eine neuen Pagecontent SCRIPT auf der gewünschten Seite erstellen.
Dort im Feld CODE dann registration_form rein und dein Script wird aufgerufen.Wenn du nun von dem auf ein andere PhpSeite willst machst dasselbe wie oben und in dem ersten PhpScript dann:

include('fileadmin/dummy/registration_save.php')
bei mir gehts einwadfrei

d-angel ·

Hallo zusammen,

ich würde gerne wissen, ob / wie es möglich ist für ein eigenes PHP-Include daten an die Typo3-URL zu hängen?

Beispiel

http://meinhost.de/index.php?id=1&meinedaten=test

Ich experimentiere zur Zeit mit einem dynamisch per PHP-Include eingefügten "extra" Menü. Die Menülinks sollen jedoch auf die selbe Seiten-ID verlinken, jedoch separate Parameter übermitteln, was bisher nicht klappt.

Zur Zeit verwende ich folgende Funktion in Typoscript

test.userFunc = user_functions->MeinMenu()

[...]

menu {
          special = directory
          special.value = 63
          1 = TMENU
          1.itemArrayProcFunc = user_functions->MeinMenu
          1.NO = 1
          1.NO.linkWrap= |<br>
         }

Im Skript kann ich dann auf das Typo3-Menüarray zugreifen und dieses Modifizieren.

Ich habe zwar schon einiges probiert, jedoch noch nichts geschafft, was zum gewünschten Erfolg führt...

Hat jemand eine Idee?

Greets
Gabriel

b00n ·

Vielen Dank für das Tutorial, hab hier echt einen halben Tag verzweifelt gesessen #angry#

Danke 😃

Unbekannter Benutzer ·
peay schrieb

So jetzt bitte nochmal für die die etwas länger brauchen o.O

Zu meinem Root-Template erstelle ich ein extension Template

Sorry,- ich blicks net ?
Ich habe version 3.8.0, und im Template kann ich KEIN "Extension-Template" erstellen.
Wo sollte das denn sein ?

Wieso ist das ausser mir noch niemandem aufgefallen ?
:o

Gruß,
M.Friedrichs

Unbekannter Benutzer ·

*grmbl*

"tt_content.script"
heisst doch, dass ich diese Erweiterung haben muss, oder ?
- leider ist sie nicht in der Liste der verfügbaren Erweiterungen !

Vom Online-Repository kann ich ebenfalls nichts installieren, jedenfalls habe ich nicht rausfinden können WIE ?
(Google ist mein Freund)

Es ist zwar schön und gut, wenn an manchen Stellen darauf hingewiesen wird, dass Typo3 für Administratoren entwickelt wurde und nicht für Heimanwender, aber es ärgert sehr, dass das Feature "php-Skripte einzubinden" doch schon Vielen gelungen sein muss aber unter Google nichts zu finden ist.

Die Frage wurde schon öfters hier im Forum gestellt und ist eigentlich bei der täglichen Arbeit mit Typo3 unerlässlich.

Gibt es NIEMAND der da mal 1 AUSSAGEKRÄFTIGE und konstruktive Zeile zu posten könnte, die über das obligatorische:" Toll Danke, jetzt hat es bei mir auch geklappt" hinaus geht ??

-> Ich habe Typo3.8 und das Quickstart Paket.

M.Friedrichs

mr.​schnabel ·

Hallo!
Mein Problem ist noch ein bisschen anders!
Verzeiht bitte, wenn das dumm ist oder so, bin ncoh ziemlicher anfänger!
Ich habe in meinem template php-bereiche, um die Seite an verschiedene Auflösungen anpassen zu können. Es ist also auch ein Formular auf der Seite, was per post je nach der auflösung einen wert wie 1024 sendet. php wertet das im template aus und berechnet so bei fixen angaben für jede auflösung einen anderen wert. wenn ich die php-datei aber als template in typo3 einbinde, dann wird der php-code einfach nicht ausgewertet ... was muss ich machen, damit das funktioniert???
mfg niklas

Unbekannter Benutzer ·

Ich habe in meinem template php-bereiche

Tja, Schnabel.

Du könntest mir jetzt sagen, wie es geht, denn Du hast es ja scheinbar geschafft, wonach ich frage.
Trotzdem behälst Du es für Dich.
So läufts hier leider.

Aber ich will mal nicht neidisch sein:
Du kannst die Bildschirmauflösung mit einer Extension auslesen. Dann wird es auch keine Probleme mit der Variablenübergabe geben.
Hier-> http://typo3.org/extensions/repository/search/cc_screenres/details/

Der aufmerksame Leser wird jetzt feststellen, dass ich inzwischen herausgefunden wo und wie ich Extensions downloade und installiere. Ich kann Allen versichern, es war niemand aus diesem oder einem anderen Forum. Es war noch nicht mal jemand über das Internet.
Ist das nicht ein Jammer ?

M.Friedrichs

[edit]
Falls Du jetzt doch noch verraten möchtest, wie Du es gemacht hast, wäre das für mich nur interessant, wenn Du mir deinen Marker nennst (wenn es einen gibt) und aus dem Setup-Text die Page-Definition (Kopfbereich), sowie die Passage in der das mit dem php steht. Danke.[/edit]

mr.​schnabel ·

tut mir leid, du überschätzt mich total!
Ich glaub ich habe mich etwas falsch ausgedrückt mit php-bereiche in meinem template meinte ich die vorlage, aus der das template entstehen soll ... ich meinte damit die html-vorlage (template ;-)) aus der das template per auto-parser etc. entstehen soll, darin hab ich php-bereiche, die ja leider nicht verarbeitet werden, wenn ich die vorlage in typo3 einbinde! Also muss das jetzt irgendwie anders gehen, nur wie?

Unbekannter Benutzer ·

Oh.
Sorry.
Dann habe ich das falsch aufgefasst.

Es ärgert mich halt sehr, dass PHP-Skripte einbinden
"bei der täglichen Arbeit mit Typo3 unerlässlich"
ist (Original-Ton/ Threadstarter),- es folglich schon sehr Viele geschafft haben müssen,- diese aber nicht über ihre individuellen Lösungen berichten.
Da fragt man sich, warum das hier laut Mund-Propaganda
das beste Typo3-Forum sein soll, wenn hier kein Austausch über "Essentials" stattfindet, sondern die Moderatoren und Skilled-User vor sich hin monologisieren müssen.
Das ist ja wie ein Kaffeekränzchen bei dem nur der Gastgeber redet ?
Da würde ja auch eine FAQ reichen...

Also, nachdem ich jetzt klüger bin (Wiederum durch ein Gespräch im RL 😉 ), kann ich dazu folgendes sagen:
Unter dem o.g. Link findet sich im Repositorium die Extension "PHP_CONTENT" (oder so ähnlich).
Wenn die installiert ist (besser mal im Extensionmanager überprüfen) lässt sich als Seiteninhalt "Plugin" anwählen und im dann im unteren Drop-Down Menü die Option "PHP SKRIPT" anwählen. Daraufhin erhält man eein Eingabe Fenster in dem PHP Code eintragen kann, der dann - hoffentlich- auch geparst/ ausgeführt wird.

Dein Template darf nur HTML enthalten und an den entsprechenden Stellen ein paar spezielle Marker.

Mein Setup sieht folgendermassen aus:

# Setting up 'page' to be the default PAGE object (type=0)
lib.stdheader.10.stdWrap.wrap = 
tt_content.stdWrap.dataWrap = <a name="{field:uid}"></a>



page = PAGE
page.typeNum = 0
page.stylesheet = fileadmin/css/example.css 
page.bodyTag = <body background="fileadmin/Image_Archive/friedrichs_online/back.gif" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> 
page.1 = TEMPLATE
page.1.marks.PAGE_UID = TEXT
page.1.marks.PAGE_UID.field = uid
page.1  {
   template = FILE
   template.file = fileadmin/templates/fo/main.htm    
    subparts.CONTENT_LEFT < styles.content.getLeft
   subparts.CONTENT_RIGHT < styles.content.getRight
   subparts.CONTENT_BORDER < styles.content.getBorder
   subparts.CONTENT < styles.content.get

 }

# Top Navigation

############################################
 page.1.marks.NAVIGATION= HMENU
  page.1.marks.NAVIGATION.1 = TMENU
  page.1.marks.NAVIGATION.1.NO {
 allWrap =<td><span class="navtext"> :: |
 </td>
 }
 page.1.marks.NAVIGATION.1.ACT = 1
 page.1.marks.NAVIGATION.1.ACT{
 allWrap = <td><span class="navtext"> :: |
 </td>
 }
  page.1.marks.NAVIGATION.2 = TMENU
 page.1.marks.NAVIGATION.2.NO {
 allWrap = <td><span class="navtext"> :: |
 </td>
 }
 page.1.marks.NAVIGATION.2.ACT = 1
 page.1.marks.NAVIGATION.2.ACT{
 allWrap = <td><span class="navtext"> :: |
 </td>
}


# Second Navigation

############################################
 page.1.marks.NAVIGATION_2= HMENU
 page.1.marks.NAVIGATION_2.entryLevel=1
  page.1.marks.NAVIGATION_2.1 = TMENU
  page.1.marks.NAVIGATION_2.1.NO {
 allWrap =<td><span class="navtext2"> :: |
 </td>
 }
 page.1.marks.NAVIGATION_2.1.ACT = 1
 page.1.marks.NAVIGATION_2.1.ACT{
 allWrap = <td><span class="navtext2"> :: |
 </td>
 }
  page.1.marks.NAVIGATION_2.2 = TMENU
 page.1.marks.NAVIGATION_2.2.NO {
 allWrap = <td><span class="navtext2"> :: |
 </td>
 }
 page.1.marks.NAVIGATION_2.2.ACT = 1
 page.1.marks.NAVIGATION_2.2.ACT{
 allWrap = <td><span class="navtext2"> :: |
 </td>
}


# Rootline Menü

page.1.marks.ROOTLINE=HMENU
page.1.marks.ROOTLINE.special=rootline
page.1.marks.ROOTLINE.entryLevel=0
page.1.marks.ROOTLINE.special.range= 0 | -1
page.1.marks.ROOTLINE.1=TMENU
page.1.marks.ROOTLINE.1.NO.allWrap= |   /   |*| |   /   |*| |

# Enabling the admin panel for the 'page' PAGE object:
page.config.admPanel=1
# Spam Protection for Email
config {
spamProtectEmailAddresses = 2
spamProtectEmailAddresses_atSubst = (at)
} 
# Set up PATH_INFO:
config.simulateStaticDocuments = PATH_INFO
config.simulateStaticDocuments_addTitle = 30


# Don't forget to add CSet Stylesheet for P margins to work properly!

Ich kann nicht beurteilen, ob das alles so richtig ist- aber es funktioniert !
-> Never change a running system, - das gilt natürlich auch hier..

Ich habe meine Grafiken (Background, etc) im fileadmin /Image_Archive/<name_der_seite> abgelegt und das Template im fileadmin/template/<name_der_seite>
, um Überblick zu behalten.

Ausserdem habe ich dort 2 menüs eingebaut (NAVIGATION). Das 2. Menü wird aber erst in der 2. Ebene aktiviert:

 page.1.marks.NAVIGATION_2.entryLevel=1

Bei "Include static" habe ich eigentlich nichts, und bei "Include static (from extensions): CSS Styled Content" eingetragen.

Damit sollte bei Dir auch alles klappen.
Für Dich gilt es dann, den im HTML Template enthaltenen PHP-Code als Seiteninhalt in das o.g. Auswahlfenster zu kopieren.

Ich wünschte, so ausführliche Dialoge gäbe es hier öfter, dann käme ich auch schneller voran.

[edit]
Achja:
Den Setup Text könntest Du eigentlich so kopieren, wenn Du noch keine besondern Inhalte in Deiner Seite hast, dann sparst Du Dir viel Arbeit.
Meine Marker sind:
<!-- ###CONTENT_LEFT### -->
<!-- ###CONTENT_RIGHT### -->
<!-- ###CONTENT_BORDER### -->
<!-- ###CONTENT### -->
###NAVIGATION###
###NAVIGATION2###
(Selbsterklärend, oder ?)
[/edit]

Gruß,
M.Friedrichs

mr.​schnabel ·

erst einmal vielen dank für die sehr ausführliche antwort!

wenn ich das nicht falsch verstanden habe, dann ermöglicht die extension, dass man php als contents einfügen kann.
Allerdings müsste ich dann doch den code bei jeder seite einzelnd einfügen und das ist ja keine zufriedenstellende lösung.
außerdem ist viel vom php in meinem stylesheet ... eigentlich besteht mein stylesheet aus php, ich hab per require style.php in den head eingebunden. in dieser datei wird per echo der stylebereich wiedergegeben und an den stellen, die sich an die auflösung anpassen müssen wird der richtige wert eben berechnet und dann auch per echo ausgegeben.

also ist diese lösung für mich wohl nicht so gut geeignet :-(

aber ich denke, dass das vielen leuten eine hilfe sein wird!

Unbekannter Benutzer ·
mr.schnabel schrieb

wenn ich das nicht falsch verstanden habe, dann ermöglicht die extension, dass man php als contents einfügen kann.

Richtig

mr.schnabel schrieb

Allerdings müsste ich dann doch den code bei jeder seite einzelnd einfügen und das ist ja keine zufriedenstellende lösung.

Nein, da das php durch die extension geparsed wird, kann man komplexe skripte einach mit <? include("DATEI")?> einbinden (www.php.org für Infos und Beispiele zu php-Befehlen).

mr.schnabel schrieb

außerdem ist viel vom php in meinem stylesheet ... eigentlich besteht mein stylesheet aus php, ich hab per require style.php in den head eingebunden. in dieser datei wird per echo der stylebereich wiedergegeben und an den stellen, die sich an die auflösung anpassen müssen wird der richtige wert eben berechnet und dann auch per echo ausgegeben.

-Typo3 verwaltet dein Stylesheet für alle/oder spezielle Seiten, wenn du es angibts (Siehe Setup/oben).
-"require" kann mit PHP_CONTENT ebenfalls ausgeführt werden wie <include>.

Wenn das komplette Template und evtl auch die Unterseiten aus reinem php sind:
Warum dann Typo3 ?
Typo3 bietet eine gewisse Sicherheit eben dadurch dass der php-Code nur begrenzt ausgeführt wird (Ganz wichtiges Feature)

Du solltest in Erwägung ziehen, die php-Geschichten "gesichert" in den Seiten einzubinden und dein Template auf Html zu begrenzen. Ansonsten hast Du ja gar keinen Vorteil durch typo3, was möchtest du denn mit typo3 verbessern ?

Gruß,
M.Friedrichs

Unbekannter Benutzer ·

Ts.

Jetzt habe ich evtl. die Lösung für dich.
Ist aber ungeprüft:
Beim Laden der Seite wird doch die index.php im Hauptverzeichnis angesprochen.
Ich hab jetzt noch nicht reingeguckt aber die wird wohl nur als Vorlage dort liegen und den Rest nachladen.
Wenn du DIE editierst, kannst Du globale Einstellungen mit php vornehmen,- denn DIE wird sicherlich auch geparst/geparsed/wie_auch_immer

Gruß,
M.F.

mr.​schnabel ·

Hallo mal wieder!
Find ich echt toll, dass du mir so viel hilfst, ich hab schon vor typo3 erfahrung mit vielen foren gemacht und finde auch, dass dieses hier (natürlich nicht auf alle bezogen!!) da nicht so gut abschneidet!

Aber na ja, ich habe das mit der index.php ausprobiert und verstehe kaum ein wort in der datei 😉
Ich hab auch über das, was du mit php meintest nachgedacht und php jetzt vollkommen aus meinem template gestrichen. hab jetzt einfach drei stylesheets, die je nach auflösung kommen sollen.
Ich versuche gerade die "screen resolution detection" extension zum laufen zu bringen ... klappt aber nicht ... ich poste mal den code, vll weiß ja jemand wie das geht:

# Default PAGE object:
page = PAGE
page.typeNum = 0

# page.config.disableAllHeaderCode=1
page.10 =< plugin.tx_automaketemplate_pi1

# Configuring the Auto-Parser:
plugin.tx_automaketemplate_pi1 {

    # Read the template file:
  content = FILE
  content.file = fileadmin/template/main/template1.html

    # Here we define which elements in the HTML that 
    # should be wrapped in subpart-comments:

  elements {
    BODY.all = 1
    BODY.all.subpartMarker = DOCUMENT_BODY
    HEAD.all = 1
    HEAD.all.subpartMarker = DOCUMENT_HEADER
    HEAD.rmTagSections = title
  }
  # Prefix all relative paths with this value:
  relPathPrefix = fileadmin/template/main/
}

# [userFunc= tx_ccscreenres_match(0)]
// screen res detection
page.1 < plugin.tx_ccscreenres_pi1
 
[userFunc= tx_ccscreenres_match(<0)]
page.stylesheet = fileadmin/template/main/800.css

[userFunc= tx_ccscreenres_match(<900)]
page.stylesheet = fileadmin/template/main/1024.css

[userFunc= tx_ccscreenres_match(<1100)]
page.stylesheet = fileadmin/template/main/1280.css

Alternativ wäre es auch toll, wenn jemand wüsste, wie man je nachdem, welchen wert $_post hat einen anderen stylesheet verwendet!

vielen dank und mfg niklas

Unbekannter Benutzer ·

Hi Mr.Schnabel.

Leider kann ich Dir nur soweit helfen, wie ich es selber
schon verstanden habe.
Was die index.php betrifft:
Hier werden jede Menge libraries und Code-Schnipsel "ge-includet". Dort etwas mit PHP einzutragen lohnt sich speziell dann, wenn es für alle seiten gelten soll und der PHP-Code innerhalb der Seite verarbeitet werden kann.
Also sowas, wie eine Uhrzeitangabe, eine Counterfunktion oder die versteckte Übergabe von Parametern/ Variablen/ Informationen über den Benutzer..
Das könnte man dann im "versuch-und-Irrtum"-Prinzip irgendwo in die index.php reinsetzen, bis es an der gewünschten Stelle auftaucht.

Die Erweiterung sagt folgendes:

The extension includes JavaScript in the HTML header which call the current or another page with the screen resolution as GET parameter:

www.test.net/index.php?id=21&tx_ccscreenres_pi1[res]=1024

Die extension included Javascript, welches die aktuelle oder eine weitere Seite mit der Bildschirmauflösung als Parameter aufruft.
__________________________________________
Das hier muss in das HTML-Template (ich glaube in den header) , wo es als typoscript auch verarbeitet/geparsed wird:

<!-- This extension is meant to be used inside a TypoScript template. Therefore there's no easy click and run. See in the next section for example code.
detectionType = cooperative-select Here's a TypoScript example for "cooperative-select". -->

plugin.tx_ccscreenres_pi1.detectionType = cooperative-select

[userFunc= tx_ccscreenres_match(0)]

// screen res detection

page.100 < plugin.tx_ccscreenres_pi1

[userFunc= tx_ccscreenres_match(>0)]

// template code used for 800 pixel (or smaller) screens

page.100 >

page.100 = TEXT

page.100.value = this is a 800 pixel screen

[userFunc= tx_ccscreenres_match(>800)]

// used for screens bigger than 800 pixel

page.100 >

page.100 = TEXT

page.100.value = this is a 1024 pixel screen, but maybe it's bigger

[global]

Das hier kommt in der Template Sektion in das Constants-Feld:

#At CONSTANT, put a condition like this:
******************************************
screenres = 800
[userFunc= tx_ccscreenres_match(1024)]
screenres = 1024
[global]
******************************************

Und das hier in den Setup-Bereich:

#At SETUP, like this:
******************************************
[treeLevel = 0]
plugin.tx_automaketemplate_pi1.content.file = fileadmin/templates/template_HOME_{$screenres}.htm
[global]
[treeLevel = 1]
plugin.tx_automaketemplate_pi1.content.file = fileadmin/templates/template_SUBHOME_{$screenres}.htm
[global]

Dann musst Du verschiedene Templates erstellen, welche den namen der Auflösung haben:
800.htm; 1152.htm; 1200.htm; etc..
(template_SUBHOME_{$screenres}.htm)

So, you put two sets of templates, at your fileadmin directory, one ending on 800.htm, the other ending on 1024.htm, and TYPO3 will do the work!

Im Beispiel werden die Auflösungen für 800x600 und für 1024x768 gelenkt.

Gruß,
M.Friedrichs

CryoGenID ·

Hey :-)

Um hier nochmal sozusagen "Back to Topic" zu kommen...

Ich habe auch ein Problem und hoffe ihr könnt mir helfen, da mein Freund Google mir leider nix dazu sagen konnte und ich daher hoffe dass das Ganze leicht zu lösen ist:
Ich habe im Moment mein SeitenLayout (ohne Frames) mit TemplaVoila eingebunden, das geht auch ganz toll.
Nun möchte ich habe auf ein paar Seiten meine PHP-Scripts einbinden, diese haben z.B. eine Eingabemaske mit "Submit"-Button, also ein Form. Es soll dann das "Ergebnis" wieder auf der Seite durch das PHP-Script angezeigt werden. Ich verwende im Moment dieses PHP-Parser-Extra, wo man direkt den Code eingeben kann (also kein spezielles "Extension Template" weil ich das so praktischer finde (wenn's denn mal geht *g*)). Dort habe ich einfach mit "include_once" die entspr. PHP-Datei "aufgerufen".
Problem ist nun: Wenn ich als "action" der Form dies hier angebe:
"htmlspecialchars(t3lib_div::getIndpEnv('REQUEST_URI'))" dann komme ich
zwar wieder wunderbar auf die gleiche Seite, aber es wurden keine Variablen übergeben :-(
Wenn ich hingegen wie früher $PHP_SELF eingebe, dann kommt eben nur mein Script und meine "Restseite" aus Typo ist weg...

Also wie schaffe ich es denn dann mit der 1.Lösung, auf die per POST übergebenen Variablen zuzugreifen?

Hier ist einfach mal ein kleines Demo-PHP-File, das nimmt einfach einen Text entgegen und soll den dann wieder ausgeben:

<?php
define('PATH_t3lib', '../../../t3lib/');
require_once(PATH_t3lib.'class.t3lib_div.php');
require_once(PATH_t3lib.'class.t3lib_extmgm.php');

// *******************************
// Set error reporting
// *******************************
error_reporting (E_ALL ^ E_NOTICE);

if ($_POST['textErg'] != "")
	printf("Text war: ".$_POST['textErg']);
else
{
	$actionThing = htmlspecialchars(t3lib_div::getIndpEnv('REQUEST_URI'));
	printf("
	<form name="\" form1="" method="\" post="" action="\" actionthing="">
	<p> <b>Text:<input type="\" text="" name="\" texterg="" maxlength="\" 10="" size="\" />
	<input type="\" submit="" name="\" button_send="" /></b> </p>
	</form>
	");
}

?>

Also wie Ihr seht, ein QuickAndDirty Beispiel...

Irgendwie muss des doch gehen oder?

Ich bin für jede Hilfe dankbar!!!

Danke schonmal im Vorraus für Eure Hilfe und Mühe!

Ganz liebe Grüße,

Chris[/b]