Dieser Fehler kommt dann, wenn der Submit-Button den Namen ’submit‘ trägt (name=“submit“). Da hilft es entweder den Button umzubenennen, oder statt $(‚form‘).submit() $(‚form‘).submit.click() zu verwenden.
Beiträge von npostnik
Fluid Pagination Widget
Nachdem ich es geschafft habe, dem Fluid Pagination Widget ein eigenes Template aufzuzwingen, musste ich nun weitere Anpassungen vornehmen. Da ich so viele Datensätze habe, umfasste meine Liste mit Seiten über 1000 Stück. Selbst wenn ich sie alle nebeneinander darstellen kann, ist die Blätterfunktion kaum zu gebrauchen. Ich wollte daher folgendes erreichen:
– konfigurierbare Anzahl der Seiten, die neben der aktuellen Seite angezeigt werden
– Link zu allerersten und allerletzten Seite
– falls Seiten übersprungen werden, sollte es erkennbar sein
Mein Ziel also:
![]()
Um das zu erreichen, habe ich zunächst den Controller angepasst: ich führe einen neuen Parameter ein (adjacentPagelinks), damit kann die Anzahl der Seiten neben der aktuellen Seite konfiguriert werden. In der Funktion buildPagination, die ich zunächst aus der PaginateController-Klasse von Fluid übernommen habe verarbeite ich den neuen Parameter. Die For-Schleife, die die Links zu den Seiten generiert, beginnt nun nicht mehr bei 1 und endet bei $this->numberOfPages. Stattdessen beginnt sie bei einer erreichneten $firstPage und endet bei $lastPage. Wenn $firstPage größer als 2 ist, dann wurde eine Seite übersprungen und es müssen Punkte (…) angezeigt werden. Das gleiche mache ich mit $lastPage.
Hier ist der komplette PaginationController-Code.
Es müssen natürlich Anpassungen im Template vorgenommen werden. Die im Controller gesetzten Variablen firstPage, spacerAfterFirst, lastPage und spacerBeforeLast müssen im Template entsprechend verarbeitet werden. Ein Auszug aus dem Code des Templates ist hier.
Eigenes Template im Fluid Pagination Widget
Nach langer Suche über Google bin ich schon fast verrückt geworden – es gibt viele Tipps, Fragen zu dem Thema, aber keine Antwort hat zu irgendwas geführt. Die beste Anleitung fand ich hier: Fluid-Pagebrowser. Nachdem ich sie befolgt habe, hat es immer noch nicht funktioniert, stattdessen bekam ich eine Fehlermeldung: „Sorry, requested view was not found“, genau wie im forge.typo3 beschrieben. Nach ein bisschen ausprobieren, habe ich nun die Lösung gefunden.
1) Zunächst muss der PaginationController erweitert werden. Dazu im Ordner Classes/ViewHelpers/Widgets/Controller einen Datei PaginateController.php erstellen. Darin steht folgendes:
<?php class Tx_YourExt_ViewHelpers_Widget_Controller_PaginateController extends Tx_Fluid_ViewHelpers_Widget_Controller_PaginateController { /** * @param Tx_Extbase_MVC_View_ViewInterface $view * @return void * @todo implement logic for overriding widget template paths (tx_extension.view.widget.<WidgetViewHelperClassName>.templateRootPath...) */ protected function setViewConfiguration(Tx_Extbase_MVC_View_ViewInterface $view) { $extbaseFrameworkConfiguration = $this->configurationManager->getConfiguration(Tx_Extbase_Configuration_ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK); $widgetViewHelperClassName = $this->request->getWidgetContext()->getWidgetViewHelperClassName(); if (isset($extbaseFrameworkConfiguration['view']['widget'][$widgetViewHelperClassName]['templateRootPath']) && strlen($extbaseFrameworkConfiguration['view']['widget'][$widgetViewHelperClassName]['templateRootPath']) > 0 && method_exists($view, 'setTemplateRootPath')) { $view->setTemplateRootPath(t3lib_div::getFileAbsFileName($extbaseFrameworkConfiguration['view']['widget'][$widgetViewHelperClassName]['templateRootPath'])); } } } ?>
Der Klassenname enthält den Namen der Extension, also muss Tx_YourExt entsprechend angepasst werden. Der Inhalt dieser Klasse ist das Diff aus dem Ticket im Forge, in dem die Template-Problematik im Paginate Widget besprochen wird.
2) Dann muss ein Template für das Paginate Widget erstellt werden. Dazu am besten die entsprechende Datei aus dem Fluid-Ordner kopieren, individualisieren und anpassen. Template für Paginate Widget in Fluid ist in typo3/sysext/fluid/Resources/Private/Templates/ViewHelpers/Widget/Paginate. Das Template wird kopiert nach Resources/Private/Backend/Templates/ViewHelpers/Widget/Paginate im Extension-Ordner.
3) Dann muss in der Konfiguration einmal die Klasse des Pagination Widgets mittels Dependancy Injection gesetzt werden und der Pfad zum Template muss angepasst werden. Daher folgendes in der Konfiguration der Extension vornehmen (in meinem Fall wars ein Modul):
module.tx_myext { view { widget.Tx_MyExt_ViewHelpers_Widget_PaginateViewHelper.templateRootPath = {$module.tx_myext.view.templateRootPath} } } config.tx_extbase.view.widget.Tx_Fluid_ViewHelpers_Widget_PaginateViewHelper.templateRootPath = {$module.tx_myext.view.templateRootPath}
Überall da, wo ich myext eingesetzt habe, kommt der Name der Extension hin.
Nach diesen 3 Anpassungen hat es bei mir funktioniert. Sollte jemand, der es besser weiß (Mitglieder des Fluid-Teams) diesen Beitrag lesen, würde ich mich über Korrekturvorschläge wahnsinnig freuen.
Spielerei mit CSS Transformations
Nivo-Slider Externe Controls
Beim Initialisieren des Nivo-Sliders gibt man eine Funktion an, die aufgerufen wird, wenn der Slider vollständig geladen ist:
$("#nivoslider").nivoSlider({ directionNav: true, afterLoad: nivoAfterLoad });
Hat man folgende HTML-Struktur in den externen Controls
<div id="nivoControl"> <ul> <li rel="0"><a href="#">Seite 1</a></li> <li rel="1"><a href="#">Seite 2</a></li> <li rel="2"><a href="#">Seite 3</a></li> <li rel="3"><a href="#">Seite 4</a></li> <li rel="4"><a href="#">Seite 5</a></li> </ul> </div>
kann man in der Funktion auf das Rel-Attribut zugreifen und das entsprechende Slide direkt aufrufen. Damit der Code funktioniert, muss die Navigation aktiviert werden (man kann sie ja mit CSS ausblenden, wenn es stört) mit dem Parameter directionNav im Aufruf der Funktion (s.o.)
Zebratabellen mit JavaScript und CSS3
Was sind Zebratabellen: total schöne Tabellen bei denen diel Zeilen abwechselnde Farben haben. In meinem Fall unterschied sich die letzte Zeile auch ein wenig. Die Klasse contenttable wird Tabellen gegeben, die im RTE in TYPO3 erstellt worden sind.
Theretisch reicht etwas CSS mit folgenden Selektoren:
table.contenttable { } table.contenttable th { } table.contenttable td { } table.contenttable td:first-child { } table.contenttable td.first { } table.contenttable td:last-child { } table.contenttable td.last { } table.contenttable th p, table.contenttable td p { } table.contenttable tr:nth-child(even) td { } table.contenttable tr.even td { } table.contenttable tr:last-child td { } table.contenttable tr.last td { }
Ähnliche Selektoren, wie z.B. td:last-child und td.last kann man leider nicht zusammenfassen, da der IE sie dann nicht interpretiert.
Im IE7 und IE8 klappt es nur mit CSS natürlich nicht, unterstützt werden muss das Ding ja trotzdem, daher hilft etwas JavaScript:
$('table.contenttable').each( function(index, value) { var $s=1; $(this).find("tr").each(function(){ $s++; if($s%2==1) $(this).addClass('odd'); else $(this).addClass('even'); $(this).children('td').first().addClass('first'); $(this).children('td').last().addClass('last'); }); $(this).find("tr").last().addClass('last'); });
TYPO3 keine Thumbnails im Backend
Im Frontend werde die Bilder korrekt angezeigt, Image Magick funktioniert einwandfrei, trotzdem sind keine Bilder im Backend zu sehen. Dank diesem Artikel konnte ich mein Problem lösen, in dem ich die Leerzeile am Ende der RealURL Konfiguration entfernt habe. Alternativ das schließende PHP-Tag entfernen.
Step Choreo (Fortgeschritten)
Block A (bilateral)
8 – Chacha over, Turn Reverse 270°, endet im Straddle
8 – Single Stomp over auf die andere Seite kreuzen, Double Stomp Tango auf dem Boden
Aufbau: Knee + 3 Basic – Knee wird zu Chacha – Chacha over, mit Basic zurück – letzten zwei Basic werden zu Single Stomp + Double Stomp
Block B (unilateral)
8 – Double Stomp zurück (Fuß links setzen, Fuß nach rechts setzen, damit rüber), Single Stomp
8 – 2 Kick
Aufbau: 2 Basic + 2 Kick – Basic zu Double Stomp + Single Stomp
Erst dann mit dem Stomp auf die andere Seite wechseln, wenn beide Blöcke aufgebaut sind
Block C (bilateral)
10 – Knee im L zur Seite, Tap, 2 March Switch (damit auf die andere Seite ab)
6 – Pendel, Knee
Aufbau: Repeater + 2 Basic – aus Repeater wird L-Step – aus dem letzten Knee im L-Step werden Marches und Switch, danach March am Boden
Block D (bilateral)
11 – Knee, danach den Fuß auf dem Step absetzen, kurz halten, auf 5 Chacha seit in Richtung aufgestellter Fuß, Schritt zurück, Box Step auf dem Step
5 – Double Stomp Fuß hinten kreuzen
Aufbau: Kneelift + 3 Basic – Knee Tap Hold + March auf dem Boden – Knee Tap Hold + Chacha seit + March
Block E (bilateral)
8 – Mambo Chacha oben, Mambo Chacha am Boden
8 – Repeater Kick: Stomp, Switch, Stomp, Switch, Kick
Aufbau Repeater: Taps im Wechsel nach vorn, Kick – statt Taps Stomp Switch
Block F (bilateral)
8 – Basic, V-Step
8 – V-Step nach hinten (A-Step), Flieger mittig nach vorn
Extension für Kurspläne (np_timetable) im Einsatz
Da ich selbst als Trainerin Kurse im Fitnessstudio gebe, ist mir irgendwann aufgefallen, dass es keine Extension gibt, mit der sich Kurspläne gut darstellen lassen. Daher hatte ich Mitte 2009 eine Extension erstellt, mit der man Kurspläne vor allem für Fitnessstudios anlegen und verwalten kann. Die Funktionsweise ist wie folgt: man erstellt eine Liste von Trainern und eine Liste von Kursen, die man in Kategorien einteilen kann, die man vorher erstellt hat. Dann legt man eine Kursplan an und fügt Timeslots hinzu. Ein Timeslot ist eine Uhrzeit mit einem Kurs und einem Trainer. Also z.B. Trainer X gibt am Montag um 19 Uhr den Kurs A. Diese Extension hatte ich zunächst mit lib/div geschrieben und sobald ich das nötige Wissen hatte, habe ich es auf Basis von Extbase umgeschrieben.
Es freut mich sehr, dass diese Extension nun im Einsatz ist – auf http://www.provitaconcept.de/sonstiges/kursplaene/. Der Entwickler der Seite hatte mich auf einige Fehler hingewiesen, die ich daraufhin behoben habe. Die Version 1.4.1 der Extension np_timetable im TER ist nun im Status „beta“ und kann gerne auf weiteren Seiten zum Einsatz kommen.
UPDATE: Aufgrund einer E-Mail von Thomas (danke!) sind wohl noch zwei Dinge offen, die ich so schnell wie möglich beheben werde: Beim Speichern wird der ausgewählte Controller falsch in der DB gespeichert, da das > aus der Auswahl entfernt wird. Zum anderen Unterscheidet Unix im Vergleich zu Windows Groß- und Kleinschreibung, daher werden die Templates nicht gefunden. In diesem Fall die Templates umbenennen, so dass sie mit einem Großbuchstaben beginnen (also Default.html statt default.html).
Oxid: Wunschzettel, Artikelvergleich, Lieblingslisten deaktivieren
Wunschzettel:
Im Admin-Bereich Erweiterungen> Themes > [Theme wählen] > Funktionen, dort den Haken bei „Wunschzettel deaktivieren“ setzen bzw. entfernen.
Artikelvergleich:
Im Admin-Bereich Erweiterungen> Themes > [Theme wählen] > Funktionen, dort den Haken bei „Artikelvergleich aktivieren“ setzen bzw. entfernen.
Lieblingslisten:
Im Admin-Bereich Erweiterungen> Themes > [Theme wählen] > Funktionen, dort den Haken bei „Lieblingslisten aktivieren“ setzen bzw. entfernen.
Merkzettel:
Merkzettel kann nur über Template ein- und ausgeschaltet werden. d.h. in der Produktdetailansicht muss im Dropdown der Eintrag „Merkliste“ auskommentiert werden. Und die nicht mehr benötigte Merklistenübersicht im Kundenkonto kann ebenfalls ausgeblendet werden.
Downloads:
Im Admin-Bereich Stammdaten > Grundeinstellungen > Einstellungen > Download-Artikel, dort den Haken entfernen.
Neueste Kommentare