Hi Leute,
ich hab mir eine Extension im extension_builder zusammengestellt. Die list und show Templates hab ich angepasst und alle funktioniert super. Hier sind unteranderem Kategorien angelegt.
Derzeit binde ich das FE Plugin über Plugins und dann die Extension ein.
Ich möchte nun, dass ich im Backend beim FE Plugin die Kategorie auswählen kann und dann im Fluid Template dann nur die Kategorie ausgegeben wird, sozusagen ein Filter.
Wie kann ich fürs Backend im FE Plugin ein Drop Down definieren, die die Kategorien beinhaltet?
Und wie kann ich dann das ganze übers Fluid Template ausgeben?
Ich hoffe jemand kann mir helfen.
Gruß Mike
ich hoffe das hilft als beispiel
ich habe ein Modell "Lessions" und eines Names "Tags". Die Lessions sind alle mit einem oder meheren Tags versehen.
über die Frontendsuche kann der user nach Lessions suchen, die diesen Tag haben. ABER ich kann das Plugin auf einer seite absetzen und gezielt nur Lessions anzeigen lassen, die mit im Backend gewählten tag markiert sind:
dazu ist im
Configuration -> Flexform -> flexform.xml der folgende abschnitt enthalten ...
<settings.lesson.list.filter.tag>
<TCEforms>
<label>LLL:EXT:marit_elearning/Resources/Private/Language/locallang_db.xml:tx_maritelearning_domain_model_tag</label>
<config>
<type>group</type>
<internal_type>db</internal_type>
<allowed>tx_maritelearning_domain_model_tag</allowed>
<size>1</size>
<maxitems>1</maxitems>
<minitems>0</minitems>
</config>
</TCEforms>
</settings.lesson.list.filter.tag>
im Lession controller dann das ganze auswerten:
wenn
$this->settings['lesson']['list']['filter']['tag'] gesetzt, dann entsprechend nur solche Daten aus dem repostory holen ...
Hab jetzt mal versucht ein Flexform einzubinden, bin nach dieser Anleitung vorgegangen, allerdings wird mir das Flexform nicht im Backend angezeigt?
Was ist hier falsch?
http://www.typo3-snippets.de/snippets/extbase-und-fluid/flexforms-mit-typo3-61-nutzen.html
ich habe das genauso in Typo3 4.5 (ok, da das einbinden der Flexform noch ohne namespace) und in 6.1 am laufen ...
Konfigurationscache löschen?
und statt ####aktion###.xml wäre das in meinem beispiel:
lessions.xml
einmal als namen der Flexform und einmal in der ext_tables.php
evt. Grosskleinschreibung des pluginnamens / der extension ?
hier der auszug aus einer meiner ext_tables.php (unter 4.5)
d.h. statt "t3lib_extMgm::" namespaced wie im Beispiel (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility:: )und auch statt $GLOBALS['TCA'] .. in typo3 6.x $TCA['tt_content']
$extensionName = t3lib_div::underscoredToUpperCamelCase($_EXTKEY);
$pluginSignature = strtolower($extensionName) . '_pi1';
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature] = 'pi_flexform';
t3lib_extMgm::addPiFlexFormValue($pluginSignature, 'FILE:EXT:' . $_EXTKEY . '/Configuration/FlexForms/flexform_list.xml');
zur not lass mich mal einen Blick in deinen Code werfen ...
jörg
Also, ich habe jetzt soweit geschafft, mein Flexform wird angezeigt *freu*
Mein Flexform sieht so aus:
<T3DataStructure>
<sheets>
<sheet1>
<ROOT>
<TCEforms>
<sheetTitle>Einrichtung</sheetTitle>
</TCEforms>
<type>array</type>
<el>
<einrichtung>
<TCEforms>
<label>Einrichtung</label>
<config>
<type>select</type>
<items type="array">
<numIndex index="0" type="array">
<numIndex index="0">Plain</numIndex>
<numIndex index="1">plain</numIndex>
</numIndex>
<numIndex index="1" type="array">
<numIndex index="0">Bash</numIndex>
<numIndex index="1">bash</numIndex>
</numIndex>
<numIndex index="2" type="array">
<numIndex index="0">Cpp</numIndex>
<numIndex index="1">cpp</numIndex>
</numIndex>
<numIndex index="3" type="array">
<numIndex index="0">C-Sharp</numIndex>
<numIndex index="1">csharp</numIndex>
</numIndex>
</items>
</config>
</TCEforms>
</einrichtung>
</el>
</ROOT>
</sheet1>
<sheet2>
<ROOT>
<TCEforms>
<sheetTitle>Funktion</sheetTitle>
</TCEforms>
<type>array</type>
<el>
<funktion>
<TCEforms>
<label>Funktion</label>
<config>
<type>select</type>
<items type="array">
<numIndex index="0" type="array">
<numIndex index="0">Plain</numIndex>
<numIndex index="1">plain</numIndex>
</numIndex>
<numIndex index="1" type="array">
<numIndex index="0">Bash</numIndex>
<numIndex index="1">bash</numIndex>
</numIndex>
<numIndex index="2" type="array">
<numIndex index="0">Cpp</numIndex>
<numIndex index="1">cpp</numIndex>
</numIndex>
<numIndex index="3" type="array">
<numIndex index="0">C-Sharp</numIndex>
<numIndex index="1">csharp</numIndex>
</numIndex>
</items>
</config>
</TCEforms>
</funktion>
</el>
</ROOT>
</sheet2>
</sheets>
</T3DataStructure>
Aber wie frag ich das jetzt im Controller ab?
Aktuell werden ja alle ausgegeben, mit:
public function listAction() {
$mitarbeiters = $this->mitarbeiterRepository->findAll();
$this->view->assign('mitarbeiters', $mitarbeiters);
}
wie sag ich ihm jetzt das er nur Einträge anzeigen soll die die Werte "Einrichtung" und "Funktion" enthalten?
Gruß Mike
ich würde das statt "Funktion" settings.function benennen:
hier ein Auszug aus meiner Flexform:
<settings.list.showPageBrowser>
<TCEforms> <label>LLL:EXT:my_ext/Resources/Private/Language/locallang_db.xml:settings.showPageBrowser</label>
<config>
<type>check</type>
</config>
</TCEforms>
</settings.list.showPageBrowser>
<settings.list.sorting>
<TCEforms>
<label>LLL:EXT:my_ext/Resources/Private/Language/locallang_db.xml:settings.sorting</label>
<config>
<type>select</type>
<size>1</size>
<maxitems>1</maxitems>
<items>
<numIndex index="0" type="array">
<numIndex index="0"></numIndex>
<numIndex index="1"></numIndex>
</numIndex>
<numIndex index="1" type="array">
<numIndex index="0">LLL:EXT:my_ext/Resources/Private/Language/locallang_db.xml:settings.sorting.crdate</numIndex>
<numIndex index="1">date</numIndex>
</numIndex>
<numIndex index="2" type="array">
<numIndex index="0">LLL:EXT:my_ext/Resources/Private/Language/locallang_db.xml:.sorting.viewed</numIndex>
<numIndex index="1">viewed</numIndex>
</numIndex>
</items>
</config>
</TCEforms>
</settings.list.sorting>
im Controller dann so drauf zugreifen:
if ( $this->settings['lesson']['list']['sorting'] == "date" ) {
...
und in der View
<f:if condition="{settings.showPagebrowser}">
...
ok, ich glaub ich habe fast kapiert ^^
hab jetzt in der Flexform das ganze geändert in:
<settings.funktion>
aber mit deinem Aufruf im Controller komm ich noch nicht ganz klar.
Ich hätte jetzt gedacht, dass ich das findALL durch findByProperty ersetze und das ganze dann UND verknüpfe und dort dann z.B. Einrichtung und Funktion abfrage?
Ist das falsch?
ja, da war ich etwas oberflächlich :
so z.b.
if ( $this->settings['funktion'] <> "" ) {
$this->elements = $this->dein_nameRepositiory->findByEigenschaft($this->settings['funktion'])
}
oder du machst die eine Function im Repository
findAllByFilter( $settings) {
/// und da dann über eigene Querys
}
siehe das etwas komplexere beispiel:
/**
* findByCategory Function, overrides the Extbase Repository function
*
* searches for Downloads, respecting the startdate and an optional Enddate
* A optional Limit can be set
*
* @param integer $category The Category the downloads should be fetched from
* @param null $user
* @param integer $limit optional Limit
*
* @return array A Array of downloads from the given Category
*/
public function findByCategory($category, $user = NULL, $limit = NULL) {
$query = $this->createQuery();
// We need multiple Constraints here
$constraints = array();
// only results with startdate before now, so only released downloads are shown
$constraints[] = $query->logicalAnd(
$query->lessThanOrEqual('startdate', time())
);
// respect the optional Enddate, when no endate is given show all
$constraints[] = $query->logicalOr(
$query->greaterThanOrEqual('enddate', time()),
$query->equals('enddate', 0)
);
// get the downloads for the right category
$constraints[] = $query->equals('category', $category);
// get the constraints concerning the userlevel, we need a reference here.
// kannst du als beispiel nehmen für andere Filter .... oder ignorieren / löschen
$constraints[] = $this->addUserConstraints($query, $user);
// tie all constraints together
$query->matching(
$query->logicalAnd($constraints)
);
// When a limit is set and the limit is bigger than 0 set it
if (isset($limit) && $limit > 0) {
$query->setLimit((int)$limit);
}
// sort the Results by position first, when no position is given sort by startdate
$query->setOrderings(
array(
'position' => Tx_Extbase_Persistence_QueryInterface::ORDER_DESCENDING,
'startdate' => Tx_Extbase_Persistence_QueryInterface::ORDER_DESCENDING
)
);
return $query->execute() ;
}
Grüße
Jörg