Hallo Leute,
ich habe eine Frage zu einem Fluid Template:
ich bekomme Kategorien ausgegeben und würde diese gerne an einen weiteren view übergeben.
Allerdings bekomme ich diese nicht ausgelesen...
<f:for each="{categories}" as="wert" key="key">
<li>{key} => {wert}</li>
</f:for>
<f:link.action action="view" arguments="{reference:reference, categories:categories}">
In der foreach bekomme ich die Werte ausgegeben, allerdings in der view versuche ich die categories auszulesen und bekomme keine Ausgabe..
Den Parameter reference bekomme ich per {reference} ausgelesen
Im Controller habe ich diese auch assigned mit:
$this->view->assign('references', $references);
$this->view->assign('category', $category);
$this->view->assign('categories', $categories);
Wäre super wenn jemand einen Tip hat!
Gruß
Halion
Du kannst keine "Collection" (ich nehme mal an dass Deine "categories" entweder ein QueryResult oder ein ObjectStorage sind) als Link-Argument übergeben...
Der link auf hat folgende Parameter im Frontend:
&tx_references_reference[categories][0]=17&tx_references_reference[categories][1]=15&tx_references_reference[categories][2]=36&tx_references_reference[categories][3]=16
Das sieht doch schon so aus als ob die übergeben werden....
Dann scheitert es wohl am rekonstruieren der Objekte vor dem Action-Aufruf. Kannst Du mal den Code der Ziel-Action inkl. Annotations posten?
Muss ich eigentlich im Controller als Parameter den übergebenen Parameter auch definieren?
Hier die action view:
{namespace ext = Tx_ExtbaseComponents_ViewHelpers}
<f:if condition="{reference}">
<ext:cache.tag object="{reference}" />
<div id="slideshow-title" class="slideshow-privat">
<h1>cat: {categories.3} </h1>
<f:for each="{categories}" as="cat" key="i">
<h1>cat: {cat} </h1>
</f:for>
{categories}
<h1>{reference}</h1>
<f:if condition="{category.uid} != never">
<f:then>
<h2>{category}</h2>
</f:then>
</f:if>
</div>
</f:if>
Hi,
was kainobi meinte, war nicht das HTML-Template, sondern der PHP-Code in Deiner View-Action. Da musst Du nämlich die übergebenen Parameter entgegennehmen und wieder an das View übergeben.
VG Karl
das ist die action aus dem Controller:
da habe ich den Parameter categories nicht drin...:
* Render given reference
* @param Tx_References_Domain_Model_Reference $reference
* @return void
*/
public function viewAction(Tx_References_Domain_Model_Reference $reference, Tx_References_Domain_Model_Category $category=null) {
$this->setPageTitle($reference->getMetaTitle());
$this->setPageDescription($reference->getMetaDescription());
$this->view->assign('reference', $reference);
$this->view->assign('category', $category);
$this->view->assign('categories', $categories);
}
und das die vorgelagerte indexview:
public function indexAction(Tx_References_Domain_Model_Category $category=null) {
if (!$category && $this->request->hasArgument('category')) {
$category = $this->request->getArgument('category');
}
$submitted = $category ? true : false;
if (!$category) {
$category = $this->categoryRepository->findByUid(intval($this->settings['categories']['includeUidList']));
}
if ($category instanceof Tx_References_Domain_Model_Category) {
$categories = $this->categoryRepository->findChildren($category);
$references = $this->referenceRepository->withPagination($this, 'findByCategory', array($category));
for ($i=0; $i<count($categories); $i++) {
$categoryObj = $categories[$i];
if ($categoryObj->getUid() === intval($this->settings['categories']['includeUidList'])) {
unset($categories[$i]);
break;
}
}
} else {
$categories = $this->categoryRepository->findAll();
$references = $this->referenceRepository->withPagination($this, 'findAll');
}
if ($category instanceof Tx_References_Domain_Model_Category) {
$this->setPageTitle($category->getMetaTitle());
$this->setPageDescription($category->getMetaDescription());
}
$this->view->assign('references', $references);
$this->view->assign('category', $category);
$this->view->assign('categories', $categories);
$this->view->assign('submitted', $submitted);
}
Bei deiner viewAction sehe ich 3 Probleme:
1. Du übergibst in der URL "categories", aber in der Action deklarierst du "category"
2. Du übergibst eine Collection von Categories, aber in der Action definierst Du als Typ das Category-Model, was aber keine Collection sein kann
3. Du hast keine @param Annotation (weder für die $category, noch für $categories)
Allerdings weiss ich nicht, wie du das Action-Argument als Collection definieren kannst (habe ich so noch nie gemacht). Wenn Du Glück hast, geht es aber so:
/**
* Render given reference
* @param Tx_References_Domain_Model_Reference $reference
* @param Tx_Extbase_Persistence_ObjectStorage<Tx_References_Domain_Model_Category> $categories
* @return void
*/
public function viewAction(Tx_References_Domain_Model_Reference $reference, Tx_Extbase_Persistence_ObjectStorage $categories=null) { ... }
Danke für deine Hilfe, allerdings bekomme ich dann die folgende Exception:
#1231178878: Given property name is not of type string.
arrghhhh...🙁