21.11.05

Fehlende Felder bei dem erweitern einer Tabelle (bei der Extensionentwicklung)

Falls Ihr eine Extension entwickelt und euch dann, obwohl Ihr "Apply a set of extended fields" beim FE Plugin angegeben habt, ein oder mehrere Felder fehlen, könnt Ihr das ganz einfach so lösen:
Öffnet die ext_tables.php (in eurem Extension Verzeichnis).
Sucht nun folgenden Code:
t3lib_div::loadTCA("tt_content");
t3lib_extMgm::addTCAcolumns("tt_content",$tempColumns,1);

jetzt fügt einfach noch folgende Zeile hinzu:
$TCA['tt_content']['types']['list']['subtypes_addlist']
[$_EXTKEY.'_pi1'] = 'tx_smartimggal_categories';

wobei 'tx_smartimggal_categories' durch das von Euch erstellte Feld ersetzt werden muss. Wenn Ihr mehrere Felder habt, könnt Ihr die einfach durch ein Komma trennen.

8.11.05

Dynamische Inhalte mit Typolinks im Seiten Caches

Bei der Extensions für Typo3 werdet Ihr wahrscheinlich öfters mal Extension mit dynamischen Inhalten erstellen (z.B. eine FAQ o.ä.).
Ich habe das Problem bei einem Glossar gehabt und nehme dieses jetzt auch Beispiel für die Lösung.
Mein Problem sah folgendermaßen aus: Ich habe ein Glossar, das eine Zeile mit allen Buchstaben des Alphabets als Links beinhaltet. Diese dienen als Filter um nur Schlagwörter mit dem Anfangsbuchstaben "a", "b", "c", etc. anzuzeigen. Die Links selber verweisen aber immer auf die gleiche Seite und hängen nur ein "&tx_myext_pi1[lchar]=a" an. Das wiederum funktioniert nicht mit aktiviertem Caching. So würde die Seite mit dem ersten aufgerufenen Buchstaben im Cache gespeichert und unabhängig vom gewählten Buchstaben angezeigt (da ja alle Buchstaben auf der selben Seite angezeigt werden).
Die Lösung für dieses Problem ist relativ simpel. Fügt einfach folgende Zeile in eure Klasse ein:
var $pi_checkCHash = TRUE;

Auf deren Bedeutung gehe ich nicht näher ein; wen es aber interessiert, kann es hier nachlesen.
Jetzt wird das Caching deaktiviert wenn im Link nicht der passende cHash mitübergeben wird. Um diesen Zu generieren fügt Ihr einfach folgenden Php Code in eurer main() Methode ein:
// Diese Zeile erstellt ein Objekt der Klasse 'cObj'
$this->local_cObj = t3lib_div::makeInstance("tslib_cObj");
// Hier setzt Ihr die Zielseite
// (in diesem Fall die gleiche)
$this->local_cObj->setCurrentVal($GLOBALS['TSFE']->id);

$this->typolink_conf = $this->conf["typolink."];
$this->typolink_conf["parameter."]["current"] = 1;
$this->typolink_conf["additionalParams"] =
$this->cObj->stdWrap(
$this->typolink_conf["additionalParams"],
$this->typolink_conf["additionalParams."]
);

// Diese Zeile ist wichtig um eure Konfiguration im
// Script wieder aufzuheben
unset($this->typolink_conf["additionalParams."]);

Jetzt habt Ihr eure Typolinks vorkonfiguriert.
Um euren Link jetzt schlussendlich zu generieren, müsst Ihr folgenden Code verwenden:
$temp_conf = $this->typolink_conf;
// Hier könnt Ihr eure GET Variablen anhängen
$temp_conf["additionalParams"] .= "&tx_myext_pi1[char]=a";
// Ich möchte nur eine URL, keinen kompletten Link
$temp_conf["returnLast"] = 'url';
// Ich möchte auch das Caching verwenden
$temp_conf["useCacheHash"] = 1;
// $the_link enthält nun meine generierte URL
// Wenn Ihr einen kompletten Link möchtet,
// entfernt die 'returnLast' Zeile und gebt als
// ersten Parameter, der hier "" ist, eure Beschriftung an.
$the_link = $this->local_cObj->typolink("", $temp_conf);

Und siehe da - alles funktioniert und eure Seite wird auf Ebene der GET Parameter in Verbindung mit der Seiten ID gespeichert.
Ihr könnt natürlich auch weitere Typolink Parameter hinzufügen.

Anmerkung: Der Typolink Teil stammt nicht von mir, sondern ursprünglich von typo3.hachmeister.org. Ich habe diesen zwar verändert, aber der ursprüngliche Code stammt von eben jener Website. Ich habe ihn der inhaltlichen Vollständigkeit halber hierhin übernommen.