Safari: RSS Feed zeigt nur ein Element

19. September 2011 in Allgemein von Leo

Falls Safari im RSS Feed nur 1 Element Darstellt, liegt dies höchstwahrscheinlich daran, dass die anderen Elemente als Duplikate wahrgenommen werden. Dies geschieht z.B. wenn der Titel bei allen gleich verlinkt ist.
Um dies zu Lösen nutzt man am besten das Element. Im Element gibt man einen Link an, welcher aber keinen Einfluss sonst hat, ausser das er mitteilt das es sich hier um ein einmaliges Element handelt.
So könnte man z.B. dies so Lösen:

<guid>http://www.mywebsite.xy/news/#newsid_123</guid>

HTML Select mit Fluid erstellen

31. Mai 2011 in TYPO3 von Leo

Mithilfe von Fluid kann aus einem Array welches wir mit Extbase erstellt haben, ein einfaches HTML Select erstellt werden. Dies funktioniert so:

<f:form.select name="person" property="person" options="{allPersons}"
optionValueField="firstname" optionLabelField="firstname"/>

Kurz erklärt: Wir erstellen aus dem Array “allPersons” (mit geschweiften Klammern als Array gekennzeichnet) die Optionen für das Select. Das OptionValueField ist der Wert der Option welcher schlussendlich als value=”" im Option Tag stehen wird. Mit optionLabelField wird das Label des Option Tags gegeben, also was bei der Auswahl angezeigt wird.

Mit dem “name” und “property” Tag bestimmen wir schlussendlich noch wie das Select heisst, und in welcher Variable die Auswahl gespeichert wird, also im property = person. Diesen Wert würden wir dann mit getter/setter weiterverarbeiten erhalten.

Phing: Bedingungen nach Betriebssystem für Befehle

22. Februar 2011 in Coden von Leo

Um in Phing einen Befehl (Command) nur auf einem bestimmten Betriebssystem auszuführen, gibt es die Option OS. Wir können also in Befehlen in Phing die Option OS mitgeben und so nur ein bestimmtes Betriebssystem ansprechen.

Dies sieht dann z.B. so aus:

<exec command="mklink /d verzeichnis1 verzeichnis2" dir="C:\dev" os="WINNT" />

Dieser Befehl wird nur auf einem Windows System ausgeführt, da wie man hier sieht sowieso nur ein unter Windows bekannter Befehl ausgeführt wird.

Hier ausserdem eine Liste mit verschiedenen Möglichkeiten:

    * CYGWIN_NT-5.1
    * Darwin
    * FreeBSD
    * HP-UX
    * IRIX64
    * Linux
    * NetBSD
    * OpenBSD
    * SunOS
    * Unix
    * WIN32
    * WINNT
    * Windows

Subqueries in TYPO3 mit TypoScript

20. Januar 2011 in TYPO3 von Leo

In TYPO3 lassen sich per TypoScripts normale Subqueries bilden, wie man sie aus MySQL kennt. Das ganze lernte ich im Zusammenhang mit einem RSS Feed, welchen ich für einen Kunden erstellte. So musste ich mit einer ID welche ich zu beginn über eine Variable von RealURL erhielt in grossen mm_Tables nach nach weiteren ID’s suchen, mit welchen ich dann zum Ziel kam.

Für solche grosse Sprünge in Tabellen nutzten wir dann Subqueries, sozusagen Queries in Queries, welche bis ins unendliche verschachtelt werden können (Achtung Ladezeiten!).

elementxy = CONTENT
elementxy {
        # Die Tabelle die durchsucht wird
        table = tx_extension_unsere_tabelle
        select {
            andWhere {
                # Optional: Eine Variable welche wir mitbekommen (get)
                data = GP:tx_extension_pi1|showUid
                insertData = 1
                wrap = uid IN (SELECT uid_local FROM tx_extension_unsere_tabelle_auth_mm WHERE uid_foreign IN (SELECT uid_foreign FROM tx_extension_unsere_tabelle_head_mm WHERE uid_local = |))
            }
            # Der Sysfolder mit den Datensätzen
            pidInList = 1234
            orderBy = crdate DESC
            max = 15
        }

        renderObj = COA
        renderObj {
            # Das Feld welches vom SELECT ausgewählt wird
            field = title
            # Das Resultat wird gewrappt
            wrap = <item>|</item>
       }
}

Was wird also gemacht?
Zuerst geben wir die Tabelle an welche wir mit dem normalen SELECT auswählen, also SELECT … FROM . Welche Spalte wir ins SELECT werfen wird weiter unten im renderObj.field bestimmt, unser normales SELECT würde also so aussehen:

SELECT title FROM tx_extension_unsere_tabelle ...

Das ist natürlich noch nicht alles. Nach dem normalen SELECT geht es weiter mit dem andWhere aus unserem TypoScript Code. Dieses andWhere Statement hängt eigentlich nur ein WHERE an unseren bisherigen Code und wird dann mit dem Rest was im andWhere steht weitergeführt. Deshalb steht im andWhere auch nicht noch ein SELECT oder ähnlich am Anfang.

Nachdem unser Query mit den Subqueries gebildet wurde, wird mit pidInList die ID unseres Sysfolders angegeben, also der Sysfolder wo die Datensätze gespeichert sind, welche wir hier benötigen. OrderBy und Max sind normale SQL Statements, welche sicherlich jedem bekannt sind.

Danach wird unser Resultat gerendert und in den Wrap geschrieben (dort wo die Pipe “|” ist), wir können das ganze noch z.B. mit HTML Code wrappen.

Plugin per TypoScript platzieren

1. Oktober 2010 in TYPO3 von Leo

Neben dem hinzufügen von Plugins als normale Inhaltselemente, ist es auch Möglich Plugins über TypoScript zu platzieren.
Um ein Plugin per TypoScript zu platzieren benötigt man nur wenig Zeilen oder gar nur eine Zeile, welche man ins Setup seines Templates (TYPO3 Modul: “Template”) einfügt. Je nachdem wo das Plugin erscheinen soll platziert man es im Setup eines Templates einer Seite oder eben nicht.

Hat man templavoila installiert, findet man standardmässig so etwas vor:

page = PAGE
page.10 < plugin.tx_meineextension_pi1

Mit der zweiten Zeile TypoScript wäre das Plugin dann auch wirklich platziert worden.
Wer das ganze jedoch in einem TS Object Path Element (lib.) einfügen will, benutzt folgendes:

lib.beispiel = USER
lib.beispiel < plugin.tx_meineextension_pi1

Eigentlich ganz simpel.
Falls das Plugin nicht gecacht werden soll, verwendet man einfach folgendes:

lib.beispiel = USER_INT
lib.beispiel < plugin.tx_meineextension_pi1

Dies wird z.B. verwendet bei Zufälligen Inhalten, welche ja wechseln sollen, sobald man die Seite neu lädt.

Eigene Flexform in Extension einbauen

in TYPO3 von Leo

Eine Flexform kann in einer Extension benutzt werden, um eingaben und weiteres übers Backend an der Extension vorzunehmen.
Um solch eine Flexform in der eigenen Extension hinzuzufügen geht man folgendermassen vor:

1. Man legt in der eigenen Extension eine XML Datei an, am besten flexform.xml oder wie oft üblich flexform_ds.xml.

2. Nun fügt man folgende Zeilen in seine XML Datei ein:

<T3DataStructure>
  <sheets>
    <sDEF>
      <ROOT>
        <TCEforms>
          <sheetTitle>Optionen</sheetTitle>
        </TCEforms>
        <type>array</type>
        <el>
           <eine_option>
              <TCEforms>
              <label>Modus</label>
              <config>
              <items type="array">
                 <numIndex index="0" type="array">
                    <numIndex index="0">Listen Ansicht</numIndex>
                    <numIndex index="1">Detail Ansicht</numIndex>
                 </numIndex>
              </items>
              </config>
            </TCEforms>
           </eine_option>
        </el>
      </ROOT>
    </sDEF>
  </sheets>
</T3DataStructure>

Dies wäre ein Beispiel für eine Einstellung, welche natürlich so alleine nicht funktioniert.

3. Als nächstes müssen wir die Flexform in unserer Extension sozusagen registrieren, bzw. einbinden. Folgender Code kommt in die Datei “ext_tables.php” unserer Extension:

$TCA['tt_content']['types']['list']['subtypes_addlist'][$_EXTKEY.'_pi1'] ='pi_flexform';
t3lib_extMgm::addPiFlexFormValue($_EXTKEY.'_pi1', 'FILE:EXT:'.$_EXTKEY . 'pi1/flexform_ds.xml');

Der Pfad in Zeile 2 muss je nachdem wo eure Flexform liegt und heisst noch angepasst werden.

4. Um nun auf die Einstellungen als Variabeln, welche wir über die Flexform eingegeben haben im Code der Extension zugreifen zu können, benötigen wir folgenden Code am Anfang (Main):

$this->pi_initPIflexForm();

Und um wirklich auf die Variabeln zugreifen zu können folgendes:

$this->code = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'eine_option', 'sDEF');

Übrigens, ab TYPO3 4.2.1 soll folgender Code reichen um auf die Einstellungen zuzugreifen:

$this->code = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'eine_option');

Eine Ausführliche Beschreibung zu Flexformen gibt es in der TYPO3 Wiki.

Lösung: RTE lädt nach Update auf TYPO3 4.4 nicht mehr

5. August 2010 in TYPO3 von Leo

Als ich kürzlich die TYPO3 Installation eines Kunden von TYPO3 4.3.3 auf 4.4.1 geupdated habe, merkte ich beim standardmässigen Testen der Seite, dass der RTE (Rich-Text Editor) im Backend nicht mehr geladen wurde.

Nach einer kurzen Google suche fand ich auch schon die Ursache dieses eigentlich kleinen Problems. Und zwar tritt dieser Fehler auf, wenn die Extension ‘date2calendar‘ installiert ist.

Der RTE wurde nämlich in der neuen Version 4.4 komplett überarbeitet und mit ExtJS umgesetzt. Ausserdem wird die genannte Extension gar nicht mehr benötigt, da sie schon im voraus im Core eingebaut ist.

Extension deinstallieren und der RTE funktioniert wieder! :)

TYPO3: Verschiedene Bilder oder CSS Files je nach Sprache

30. April 2010 in TYPO3 von Leo

Wer seine mit TYPO3 erstelle Webseite in mehreren Sprachen hat, der möchte zum Beispiel auch sein Logo in verschiedenen Sprachen haben. Kürzlich musste ich dies für einen Kunden einrichten, dass wenn man die Sprache auf englisch stellt, auf der ganzen Webseite ein englischsprachiges Logo angezeigt wird.

Das ganze ist eigentlich nicht so kompliziert wie es sich anhört. Mit folgendem Code wird ganz simpel ein englisches Bild sowie ein spezielles CSS File eingebunden, jedoch nur wenn die Webseite auf die gewünschte Sprache eingestellt wurde.


# English
[globalVar = GP:L = 3]
page.includeCSS.file1337 = fileadmin/styles/english.css
lib.logo.value = &lt;a href="LINK ZUR WEBSEITE"&gt;&lt;img src="(PFAD ZUM BILD)/logo_en.gif" alt="Logo" title="Logo" /&gt;&lt;/a&gt;

[global]

Das “lib.logo.value” muss natürlich genau wie die Pfade und Links noch angepasst werden. Das ‘logo’ in lib.logo.value ist hierbei das div-Element in welchem das Bild platziert ist. Wichtig: Dieser Code ersetzt kein im CSS definiertes background-image, dies könnte man jedoch mit dem zusätzlichen CSS File machen, einfach ‘!important’ verwenden.

Die Zahl 3 in “[globalVar = GP:L = 3]” steht für die Sprache, die 3 ist hierbei englisch.