[TYPO3-german] Flexform Select itemsProcFunc mit Extbase inkl. ConfigurationManager, Repository
David Gurk
dgurk at medienwerft.de
Thu Oct 11 17:26:01 CEST 2012
Hi,
Grundlage ist eine Extbase Extension mit der man Teaser erstellen kann. Auf den Seite kann man mittels Plugin aus allen verfügbaren Teaser auswählen, welche angezeigt werden soll. Die Auswahl ist mittels Multiselect in Flexforms (itemsProcFunc) realisiert.
### Flexform ###
<code>
<settings.teaser>
<TCEforms>
<label>Teaser</label>
<config>
<type>select</type>
<itemsProcFunc>Tx_Example_Controller_AddItemsToFlexform->mainAction</itemsProcFunc>
<size>20</size>
<maxitems>15</maxitems>
</config>
</TCEforms>
</settings.teaser>
</code>
### Klasse ###
Die Klasse in itemsProcFunc ist eine Extbase Klasse. Folgender Code funktioniert:
<code>
class Tx_Example_Controller_AddItemsToFlexform extends Tx_Extbase_MVC_Controller_ActionController {
function mainAction($params, $conf) {
$sql = "SELECT uid, name FROM tx_example_domain_model_teaser WHERE sys_language_uid='0' AND deleted='0'";
$result = mysql_query($sql) OR die(mysql_error());
if (mysql_num_rows($result)) {
while ($row = mysql_fetch_assoc($result)) {
$params['items'][] = array($row['name'], $row['uid']);
}
}
asort($params['items']);
return $params;
}
}
</code>
Nun wollte ich allerdings, dass in den verschiedenen Seitenbereichen nur die Teaser zur Auswahl stehen, die zu dem Bereich gehören. Die Teaser sind in 2 verschieden Ordnern im Seitenbaum abgelegt. Mit den per Konstante definierte StoragePid (plugin.tx_example.persistence.storagePid) möchte ich nun auf den einzelnen Ordner zugreifen. Und dann gerne auch über das Repository die Items auslesen. Leider scheitert es schon daran den ConfigurationManager einzubinden um an die StoragePid zu kommen:
<code>
class Tx_Example_Controller_AddItemsToFlexform extends Tx_Extbase_MVC_Controller_ActionController {
/**
* @var Tx_Extbase_Configuration_ConfigurationManagerInterface
*/
protected $configurationManager;
/**
* teaserRepository
*
* @var Tx_Example_Domain_Repository_TeaserRepository
*/
protected $teaserRepository;
/**
* @param Tx_Extbase_Configuration_ConfigurationManagerInterface $configurationManager
* @return void
*/
public function injectConfigurationManager(Tx_Extbase_Configuration_ConfigurationManagerInterface $configurationManager) {
$this->configurationManager = $configurationManager;
}
/**
* teaserRepository
*
* @param Tx_Example_Domain_Repository_TeaserRepository $teaserRepository
* @return void
*/
public function injectTeaserRepository(Tx_MwPucStore_Domain_Repository_StoreRepository $teaserRepository) {
$this->teaserRepository = $teaserRepository;
}
function mainAction($params, $conf) {
$frameworkConfiguration = $this->configurationManager->getConfiguration(Tx_Extbase_Configuration_ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);/ $storagePid = $frameworkConfiguration['persistence']['storagePid'];
t3lib_div::debug($storagePid);
// $storagePid = '';
// $teaser = $this->teaserRepository->getSelectedTeaser($storagePid)->toArray();
// $this->addAllTeaser($params, $conf, $storagePid);
}
...
}
</code>
Es kommt dann leider nur der Fehler:
"Fatal error: Call to a member function getConfiguration() on a non-object..."
Weiß jemand, ob das was ich hier machen möchte, überhaupt funktionieren kann? Wenn ja, hat jemand für mich einen Hinweis? Ich bin für jede Hilfe dankbar.
Viele Grüße
David
More information about the TYPO3-german
mailing list