Extension anlegen mit Kickstarter (ohne "Frontend Plugins") [Gelöst]

  • caomhan caomhan
    Jedi-Ritter
    0 x
    133 Beiträge
    1 Hilfreiche Beiträge
    03. 09. 2010, 10:29

    Hallo,

    ich stehe vor einem kleinen problem.
    Bisher habe ich keine wirkliche Extension erstellt (lediglich ein paar Erweiterungen der Adressfelder als eigene Extension etc.). Aber eben nichts dolles...

    Jetzt habe ich eine, wie ich finde sehr gute Idee für eine Extension.
    Diese möchte ich auch umsetzen (ebenfalls nichts großes aber für mich - und bestimmt auch für andere - etwas sehr nützliches).

    Beschreibung (beispielhaft zu verstehen) :
    --------------------------------
    Die Extension beinhaltet im Prinzip nur eine Erweiterung der tt_content Elemente/DB mit einer neuen Select Box. Dort kann man dann die Hintergrundfarbe des DIV welches TYPO3 um das Inhaltselement erzeugt wählen.

    Also so:
    <div id="c2045">....</div>

    Jetzt wählt man durch die Extension im Backend (bei dem Seiteninhalt) die Farbe "Rot".

    Daraus macht meine Extension dann:
    <div id="c2045" style="color:red;">....</div>

    Die sollte am besten für alle Inhaltselemente funktionieren. Wenn es möglich ist auch mit FCEs von TemplaVoila.
    --------------------------------

    Leider weiß ich jetzt nicht so ganz wie ich vorgehe. Wie gesagt mit dem Kickstarter habe ich schonmal ein paar Felder erweitert. Also die Select/Checkboxen bekomme ich wie gewünscht in die Inhalte, dort kann ich auch schon bestimmen welche Farbe der Hintergrund haben soll.

    Jetzt ist nur meine frage: Wie aber vorallem WO Programmiere ich nun den Rest? Dass er eben dem DIV außenrum die Farbe zuweist?

    Die Extension perfectlightbox habe ich mir mal angeschaut. Diese erzeugt ja auch nur Checkboxen im Inhaltselement Bilder und setzt wenn diese gecheckt sind die lightbox mit ein. An sich eine simple Extension.

    In der Extension gibt es die "class.tx_perfectlightbox.php" im Hauptordner wo alles drin geregelt wird. Nur bei mir wird eine solche Datei (wo ich anfangen könnte die Farben auf das entsprechende DIV zuzuweisen) gar nicht erzeugt (per Kickstarter).

    Wie bekomme ich also den Start hin und eine solche Datei erzeugt damit ich loslegen kann?

    Die 100 Anleitungen zum Thema "Erste Extension schreiben" nutzen gehen immer auf "Frontend Plugin" im Kickstarter ein. Das möchte und brauche ich aber gar nicht. Im Prinzip wird es ja nur eine Extension vergleichbar mit "perfectlightbox" und natürlich einer anderen Funktion.

    Hoffe mir kann jemand ein oder zwei Tipps geben

    Vielen Dank!
    caom


  • igorshmigor igorshmig...
    Jedi-Ratsmitglied
    0 x
    941 Beiträge
    0 Hilfreiche Beiträge
    03. 09. 2010, 12:52

    Das machst du über TypoScript durch Bearbeitung von tt_content. Bei perfectlightbox geschieht dies in der Datei static/setup.txt .

    Zur Idee: schöner finde ich den Ansatz von oxylab_stdwrap. Diese Extension erlaubt mir, jedem Element eine eigene Klasse, Style oder ID zu vergeben. Somit kann ich nicht nur per CSS die Hintergrundfarbe festlegen, sondern auch padding, Rahmen, etc. und muss diese Eigenschaften nicht als inline-Style festlegen, sondern kann die CSS-Eigenschaften in eine externe CSS-Datei auslagern.

  • caomhan caomhan
    Jedi-Ritter
    0 x
    133 Beiträge
    1 Hilfreiche Beiträge
    03. 09. 2010, 13:16

    Hallo,

    das werde ich mir nochmals anschauen. Aber wie bekomme ich die Verbindung der class.EXT.php hin, sodass ich darin meinen PHP Code erstellen kann?

    Was die Extension oxylab_stdwrap macht klingt ja ganz nett aber was ich als Beispiel genannt habe, habe ich gar nicht vor :) Es hat nichts mit Hintergrundfarben oder CSS zu tun :)

    Werde mir jetzt gleich mal nen Development TYPO3 Projekt erstellen.

    Vielen Dank für einen ersten Hinweis.

  • igorshmigor igorshmig...
    Jedi-Ratsmitglied
    0 x
    941 Beiträge
    0 Hilfreiche Beiträge
    03. 09. 2010, 13:34

    Die Klasse class.perfectlightbox.php wird ebenfalls vom TypoScript aufgerufen, als userFunc.

  • caomhan caomhan
    Jedi-Ritter
    0 x
    133 Beiträge
    1 Hilfreiche Beiträge
    03. 09. 2010, 14:22

    Also ich bin nun etwas weiter.

    Ich habe meine Extension so angelegt, dass alle benötigten Felder im BE verfügbar sind (sowie in die Datenbank gesichert werden - ich hoffe es zumindest).

    Jetzt habe ich diese so erweitert, dass ich unter static/setup.txt und die constants.txt habe. Gebe ich nun in der setup.txt sowas hier ein:

    1. temp.test = TEXT
    2. temp.test.value = Yes well, mate!

    Und in meinem normalen TS-Template sowas:

    1. page.5 < temp.test

    wird mir auf meiner Seite entsprechend Yes well, mate! angezeigt.
    Also so weit so gut.

    Nur verstehe ich noch immer nicht, wie ich die verbindung zur class.myextension.php aufbaue. Ich dachte, wenn ich nun dort die userFunc aufrufe:

    1. temp.test = USER
    2. temp.test.userFunc = tx_myextension->main

    würde er an dieser stelle den Inhalt der Funktion main() meiner Klasse ausgeben. Darin steht nur "return 'Test';" aber es kommt nichts.

    Wie bekomme ich denn die Ausgabe aus meiner class.myextension.php hin?

    Viele Grüße!

  • caomhan caomhan
    Jedi-Ritter
    0 x
    133 Beiträge
    1 Hilfreiche Beiträge
    03. 09. 2010, 17:30

    Also...

    folgendes, ein hoffentlich kleines Problem habe ich noch:
    Ich habe es nun geschafft die Werte entsprechend auszulesen.

    Was ich mich nun Frage ist, wie ich eine IF-Abfrage mit einbinden kann und den Wert der für den Inhalt gesetzt wurde prüfe?

    Also wenn dem Inhaltselement gesagt wurde "Roter Hintergrund?" -> "Ja", dass ich natürlich NUR dann auch den Hintergrund Rot mache.

    Habe mein Buch mal konsultiert aber da steht - zumindest für mich - nichts erkennbar nützliches drin. Und bei Google finde ich auch keine vergleichbaren Abfragen. Dort finde ich nur Sachen wie [browser = msie] dann...

    1. [globalVar = TSFE:tx_myextension_bgcolor = 1]
    2. tt_content.stdWrap.innerWrap.cObject.default.10.value = <div style="background-color:red;" id="c{field:uid}"
    3. [end]

    Hoffe ihr könnt mir nochmals helfen :)

    Vielen Dank!

  • caomhan caomhan
    Jedi-Ritter
    0 x
    133 Beiträge
    1 Hilfreiche Beiträge
    06. 09. 2010, 16:26

    Also,

    ich habe mein Problem etwas anders gelöst.
    Daher gibt es meine Extension schon in Version 1 zum testen im TER (ka_browserexclusion). Mit der Extension wird jedem Inhalts-Element ein paar Select-Felder übergeben, in denen man auswählen kann für welche Browser der Inhalt angezeigt oder nicht angezeigt werden soll.

    Mit der Extension kann man quasi bestimmte Inhalt für bestimmte Browser ausrichten. Funktioniert soweit auch super!

    Das ganze ist jedoch noch (!) relativ simple nur per TypoScript gelöst. Aktuell wird beim einem verstecktem Element einfach das TYPO3-Wrap-DIV in

    1. <div id="c123" style="display:none;">...

    geändert. So wird der Inhalt entsprechend ausgeblendet. In den folgenden Versionen habe ich jedoch vor, den Inhalt nicht mehr "nur auszublenden" sondern entsprechend wenn er nicht angezeigt werden soll gar nicht mehr zu parsen. D.h. er soll gar nicht mehr generiert werden.

    Wie würde ich da vorgehen?
    Ich habe aktuell nur das statische Template in der setup.txt, die class.myextension.php benötigte ich ja für diese erste Version nicht mehr.

    Wie kann ich nun sagen: Wenn für dieses Content Element Browser XY auf "off" ist, dann parse den Inhalt nicht mehr?

    Über ein paar Teste mit der Extension würde ich mich freuen.

    Viele Grüße,
    caom

  • igorshmigor igorshmig...
    Jedi-Ratsmitglied
    0 x
    941 Beiträge
    0 Hilfreiche Beiträge
    06. 09. 2010, 17:34

    Na, das ist doch tatsächlich eine nützliche Extension. Dann kann ich allen IE-Usern böse Sachen schreiben. ;)

    Hier ist die Lösung (schon getestet und für gut befunden):

    1. tt_content.if.value.field=tx_kabrowserexclusion_firefox
    2. tt_content.if.equals=none
    3. tt_content.if.negate=1

  • caomhan caomhan
    Jedi-Ritter
    0 x
    133 Beiträge
    1 Hilfreiche Beiträge
    06. 09. 2010, 17:47

    :) Hehe...funkt wunderbar.

    Geile Sache..echt easy :) Wenn man weiß wie es geht.
    Macht ja richtig spaß sich Extensions auszudenken.

    Aber auf die Idee kam ich weil der IE6 immer mit den Social-Plugins von Facebock abgekackt ist (hatte auf einer Seite mal ca. 9 Comment Boxen - JavaScript Effekt Seite mit div. Inhalten) und dabei ging der IE6 in die Knie. Hätte ich dann einfach für den IE6 ausblenden können.

    Und positivier Nebeneffekt wie du schon sagtest: Hallo lieber Besucher, du nutzt leider einen uralten Browser. Wie wärs mit: Firefox, Google Chrome, Safari? :) Zitat von MS: Du trinkst ja auch keine 10 Jahre alte Milch, warum surfst du dann mit einem 10 Jahre alten browser?

    Werd die EXT mal im TER Updaten :)

  • igorshmigor igorshmig...
    Jedi-Ratsmitglied
    0 x
    941 Beiträge
    0 Hilfreiche Beiträge
    06. 09. 2010, 18:32

    Um die Datenbank klein zu halten würde ich jedoch empfehlen, den Tabellenfeld-Typ von varchar(5) auf boolean zu ändern.