Skip to content

Instantly share code, notes, and snippets.

@olek07
Created September 27, 2016 12:30
Show Gist options
  • Save olek07/1f071a9df0948643d82c6e2c0995a9da to your computer and use it in GitHub Desktop.
Save olek07/1f071a9df0948643d82c6e2c0995a9da to your computer and use it in GitHub Desktop.

Revisions

  1. olek07 created this gist Sep 27, 2016.
    106 changes: 106 additions & 0 deletions Example. Related elements as select menu
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,106 @@
    ======= ext_tables.sql ============
    CREATE TABLE tx_extkey_domain_model_maintablename (
    partner int(11) unsigned DEFAULT '0'
    );

    ======== TCA: your main TCA ===========
    'partner' => array(
    'exclude' => 1,
    'label' => 'Partner',
    'config' => array(
    'type' => 'select',
    'renderType' => 'selectSingle',
    'foreign_table' => 'tx_extkey_domain_model_partner',
    'foreign_table_where' => 'ORDER BY tx_extkey_domain_model_partner.name'
    ),
    )

    ====== Model: your main model =========
    /**
    * partner
    *
    * @var int
    */
    protected $partner = 0;

    /**
    * Returns the partner
    *
    * @return int
    */
    public function getPartner()
    {
    return $this->partner;
    }

    /**
    * Sets the partner
    *
    * @param int
    * @return void
    */
    public function setPartner($partner)
    {
    $this->partner = $partner;
    }

    ===== Main Controller =======
    /**
    * partnerRepository
    *
    * @var \Gigabonus\Gbpartner\Domain\Repository\PartnerRepository
    * @inject
    */
    protected $partnerRepository = NULL;

    /**
    * action new
    *
    * @return void
    */
    public function newAction()
    {
    $partners = $this->partnerRepository->findAll();
    $this->view->assign('partners', $partners);
    }

    ========== view ===========
    <select name="tx_gbaccount_transactions[newTransaction][partner]">
    <f:for each="{partners}" as="partner" iteration="Iteration">
    <option value="{partner.uid}">{partner.name}</option>
    </f:for>
    </select>

    ========= better practice For storagePid ==========
    plugin.tx_mainkey_pluginkey {
    settings {
    storagePid = {$plugin.tx_mainkey_pluginkey.persistence.storagePid}
    }
    }

    ========= Controller again ==========
    /**
    *
    * Property Mapping
    */
    protected function initializeCreateAction(){
    $propertyMappingConfiguration = $this->arguments['newTransaction']->getPropertyMappingConfiguration();
    $propertyMappingConfiguration->allowAllProperties();
    $propertyMappingConfiguration->setTypeConverterOption('TYPO3\CMS\Extbase\Property\TypeConverter\PersistentObjectConverter', \TYPO3\CMS\Extbase\Property\TypeConverter\PersistentObjectConverter::CONFIGURATION_CREATION_ALLOWED, TRUE);
    $propertyMappingConfiguration->setTargetTypeForSubProperty('partner', 'int');
    }

    /**
    * action create
    *
    * @param \Gigabonus\Gbpartner\Domain\Model\Transaction $newTransaction
    * @return void
    */
    public function createAction(\Gigabonus\Gbpartner\Domain\Model\Transaction $newTransaction)
    {
    $settings = $this->settings;
    $pid = (int)$this->settings['storagePid'];
    $newTransaction->setPid($pid);
    $this->transactionRepository->add($newTransaction);
    $this->redirect('list');
    }