Skip to content

Instantly share code, notes, and snippets.

@metaxos
Last active August 29, 2015 14:14
Show Gist options
  • Save metaxos/91622c536588d0aa8440 to your computer and use it in GitHub Desktop.
Save metaxos/91622c536588d0aa8440 to your computer and use it in GitHub Desktop.
Typo3 Extbase m:m Testextension
<?php
namespace Testmm\Testmm\Domain\Model;
/***************************************************************
*
* Copyright notice
*
* (c) 2015
*
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
* Clients
*/
class Clients extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
/**
* name
*
* @var string
*/
protected $name = '';
/**
* doctors
*
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Testmm\Testmm\Domain\Model\Doctors>
* @lazy
*/
protected $doctors = NULL;
/**
* Returns the name
*
* @return string $name
*/
public function getName() {
return $this->name;
}
/**
* Sets the name
*
* @param string $name
* @return void
*/
public function setName($name) {
$this->name = $name;
}
/**
* __construct
*/
public function __construct() {
$this->initStorageObjects();
}
/**
* Initializes all ObjectStorage properties.
*
* @return void
*/
protected function initStorageObjects() {
$this->doctors = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
}
/**
* Adds a Bbb
*
* @param \Testmm\Testmm\Domain\Model\Doctors $doctors
* @return void
*/
public function addDoctor(\Testmm\Testmm\Domain\Model\Doctors $doctors) {
$this->doctors->attach($doctors);
}
/**
* Removes a Bbb
*
* @param \Testmm\Testmm\Domain\Model\Doctors $doctorToRemove The Bbb to be removed
* @return void
*/
public function removeDoctor(\Testmm\Testmm\Domain\Model\Doctors $doctorToRemove) {
$this->doctors->detach($doctorToRemove);
}
/**
* Returns the bbb
*
* @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Testmm\Testmm\Domain\Model\Doctors> $doctors
*/
public function getDoctors() {
return $this->doctors;
}
/**
* Returns the doctors
*
* @return \Testmm\Testmm\Domain\Model\Doctors $doctors
*/
public function getDoctorsArray() {
return $this->doctors->toArray;
}
/**
* Sets the bbb
*
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Testmm\Testmm\Domain\Model\Doctors> $doctors
* @return void
*/
public function setDoctors(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $doctors) {
$this->doctors = $doctors;
}
}
<?php
namespace Testmm\Testmm\Controller;
/***************************************************************
*
* Copyright notice
*
* (c) 2015
*
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
* ClientsController
*/
class ClientsController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
/**
* clientsRepository
*
* @var \Testmm\Testmm\Domain\Repository\ClientsRepository
* @inject
*/
protected $clientsRepository = NULL;
/**
* action list
*
* @return void
*/
public function listAction() {
$clients = $this->clientsRepository->findAll();
$this->view->assign('clients', $clients);
}
/**
* action show
*
* @param \Testmm\Testmm\Domain\Model\Clients $clients
* @return void
*/
public function showAction(\Testmm\Testmm\Domain\Model\Clients $clients) {
$this->view->assign('clients', $clients);
}
/**
* action new
*
* @param \Testmm\Testmm\Domain\Model\Clients $newClients
* @ignorevalidation $newClients
* @return void
*/
public function newAction(\Testmm\Testmm\Domain\Model\Clients $newClients = NULL) {
$this->view->assign('newClients', $newClients);
}
/**
* action create
*
* @param \Testmm\Testmm\Domain\Model\Clients $newClients
* @return void
*/
public function createAction(\Testmm\Testmm\Domain\Model\Clients $newClients) {
$this->addFlashMessage('The object was created. Please be aware that this action is publicly accessible unless you implement an access check. See <a href="http://wiki.typo3.org/T3Doc/Extension_Builder/Using_the_Extension_Builder#1._Model_the_domain" target="_blank">Wiki</a>', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::ERROR);
$this->clientsRepository->add($newClients);
$this->redirect('list');
}
/**
* action edit
*
* @param \Testmm\Testmm\Domain\Model\Clients $clients
* @ignorevalidation $clients
* @return void
*/
public function editAction(\Testmm\Testmm\Domain\Model\Clients $clients) {
$this->view->assign('clients', $clients);
}
/**
* action update
*
* @param \Testmm\Testmm\Domain\Model\Clients $clients
* @return void
*/
public function updateAction(\Testmm\Testmm\Domain\Model\Clients $clients) {
$this->addFlashMessage('The object was updated. Please be aware that this action is publicly accessible unless you implement an access check. See <a href="http://wiki.typo3.org/T3Doc/Extension_Builder/Using_the_Extension_Builder#1._Model_the_domain" target="_blank">Wiki</a>', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::ERROR);
$this->clientsRepository->update($clients);
$this->redirect('list');
}
/**
* action delete
*
* @param \Testmm\Testmm\Domain\Model\Clients $clients
* @return void
*/
public function deleteAction(\Testmm\Testmm\Domain\Model\Clients $clients) {
$this->addFlashMessage('The object was deleted. Please be aware that this action is publicly accessible unless you implement an access check. See <a href="http://wiki.typo3.org/T3Doc/Extension_Builder/Using_the_Extension_Builder#1._Model_the_domain" target="_blank">Wiki</a>', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::ERROR);
$this->clientsRepository->remove($clients);
$this->redirect('list');
}
}
<?php
namespace Testmm\Testmm\Domain\Repository;
/***************************************************************
*
* Copyright notice
*
* (c) 2015
*
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
* The repository for Clients
*/
class ClientsRepository extends \TYPO3\CMS\Extbase\Persistence\Repository {
public function initializeObject() {
/** @var $querySettings \TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings */
$querySettings = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Typo3QuerySettings');
$querySettings->setRespectStoragePage(FALSE);
$this->setDefaultQuerySettings($querySettings);
}
}
<?php
namespace Testmm\Testmm\Domain\Model;
/***************************************************************
*
* Copyright notice
*
* (c) 2015
*
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
* Doctors
*/
class Doctors extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
/**
* name
*
* @var string
*/
protected $name = '';
/**
* clients
*
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Testmm\Testmm\Domain\Model\Clients>
* @lazy
*/
protected $clients;
/**
* __construct
*/
public function __construct() {
$this->initStorageObjects();
}
/**
* Initializes all ObjectStorage properties.
*
* @return void
*/
protected function initStorageObjects() {
$this->clients = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
}
/**
* Adds a Clients
*
* @param \Testmm\Testmm\Domain\Model\Clients $clients
* @return void
*/
public function addClients(\Testmm\Testmm\Domain\Model\Clients $clients) {
$this->clients->attach($clients);
}
/**
* Removes a Clients
*
* @param \Testmm\Testmm\Domain\Model\Clients $clientsToRemove The Clients to be removed
* @return void
*/
public function removeClients(\Testmm\Testmm\Domain\Model\Clients $clientsToRemove) {
$this->clients->detach($clientsToRemove);
}
/**
* Returns the clients
*
* @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Testmm\Testmm\Domain\Model\Clients> $clients
*/
public function getClients() {
return $this->clients;
}
/**
* Sets the clients
*
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Testmm\Testmm\Domain\Model\Clients> $clients
* @return void
*/
public function setClients(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $clients) {
$this->clients = $clients;
}
}
<table class="tx_testmm" >
<tr>
<th><f:translate key="tx_testmm_domain_model_doctors.name" /></th>
<th> </th>
<th> </th>
</tr>
<f:for each="{doctors}" as="doctor">
<f:comment>??? HOW CAN I MATCH doctor and client ???</f:comment>
<f:debug>{doctor.clients}</f:debug>
<tr>
<td><f:link.action action="show" arguments="{doctors : doctor}"> {doctor.name}</f:link.action></td>
<td><f:link.action action="edit" arguments="{doctors : doctor}">Edit</f:link.action></td>
<td><f:link.action action="delete" arguments="{doctors : doctor}">Delete</f:link.action></td>
</tr>
</f:for>
</table>
<?php
namespace Testmm\Testmm\Controller;
/***************************************************************
*
* Copyright notice
*
* (c) 2015
*
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
* DoctorsController
*/
class DoctorsController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
/**
* doctorsRepository
*
* @var \Testmm\Testmm\Domain\Repository\DoctorsRepository
* @inject
*/
protected $doctorsRepository = NULL;
/**
* action list
*
* @return void
*/
public function listAction() {
$doctors = $this->doctorsRepository->findAll();
$this->view->assign('doctors', $doctors);
}
/**
* action show
*
* @param \Testmm\Testmm\Domain\Model\Doctors $doctors
* @return void
*/
public function showAction(\Testmm\Testmm\Domain\Model\Doctors $doctors) {
$this->view->assign('doctors', $doctors);
}
/**
* action new
*
* @param \Testmm\Testmm\Domain\Model\Doctors $newDoctors
* @ignorevalidation $newDoctors
* @return void
*/
public function newAction(\Testmm\Testmm\Domain\Model\Doctors $newDoctors = NULL) {
$this->view->assign('newDoctors', $newDoctors);
}
/**
* action create
*
* @param \Testmm\Testmm\Domain\Model\Doctors $newDoctors
* @return void
*/
public function createAction(\Testmm\Testmm\Domain\Model\Doctors $newDoctors) {
$this->addFlashMessage('The object was created. Please be aware that this action is publicly accessible unless you implement an access check. See <a href="http://wiki.typo3.org/T3Doc/Extension_Builder/Using_the_Extension_Builder#1._Model_the_domain" target="_blank">Wiki</a>', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::ERROR);
$this->doctorsRepository->add($newDoctors);
$this->redirect('list');
}
/**
* action edit
*
* @param \Testmm\Testmm\Domain\Model\Doctors $doctors
* @ignorevalidation $doctors
* @return void
*/
public function editAction(\Testmm\Testmm\Domain\Model\Doctors $doctors) {
$this->view->assign('doctors', $doctors);
}
/**
* action update
*
* @param \Testmm\Testmm\Domain\Model\Doctors $doctors
* @return void
*/
public function updateAction(\Testmm\Testmm\Domain\Model\Doctors $doctors) {
$this->addFlashMessage('The object was updated. Please be aware that this action is publicly accessible unless you implement an access check. See <a href="http://wiki.typo3.org/T3Doc/Extension_Builder/Using_the_Extension_Builder#1._Model_the_domain" target="_blank">Wiki</a>', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::ERROR);
$this->doctorsRepository->update($doctors);
$this->redirect('list');
}
/**
* action delete
*
* @param \Testmm\Testmm\Domain\Model\Doctors $doctors
* @return void
*/
public function deleteAction(\Testmm\Testmm\Domain\Model\Doctors $doctors) {
$this->addFlashMessage('The object was deleted. Please be aware that this action is publicly accessible unless you implement an access check. See <a href="http://wiki.typo3.org/T3Doc/Extension_Builder/Using_the_Extension_Builder#1._Model_the_domain" target="_blank">Wiki</a>', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::ERROR);
$this->doctorsRepository->remove($doctors);
$this->redirect('list');
}
}
<?php
namespace Testmm\Testmm\Domain\Repository;
/***************************************************************
*
* Copyright notice
*
* (c) 2015
*
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
* The repository for Doctors
*/
class DoctorsRepository extends \TYPO3\CMS\Extbase\Persistence\Repository {
public function initializeObject() {
/** @var $querySettings \TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings */
$querySettings = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Typo3QuerySettings');
$querySettings->setRespectStoragePage(FALSE);
$this->setDefaultQuerySettings($querySettings);
}
}
Based on code from marcel: http://lbrmedia.net/codebase/Eintrag/extbase-bidirektionale-mm-relation/
I have doctors and clients. Each client can have many doctors and each doctors can have many clients. In Typo3 Backend everything works as expected.
The doctors (extending Feusers) will log in and see all clients. They can "pick" their clients. Goal is to "mark" the "picked" clients in the list. The question is how to manage this in the template without any for in for.
The ZIP of the extension can be found here: http://www.filedropper.com/testmm000201501311251
<?php
if (!defined ('TYPO3_MODE')) {
die ('Access denied.');
}
$GLOBALS['TCA']['tx_testmm_domain_model_clients'] = array(
'ctrl' => $GLOBALS['TCA']['tx_testmm_domain_model_clients']['ctrl'],
'interface' => array(
'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, name, doctors',
),
'types' => array(
'1' => array('showitem' => 'sys_language_uid;;;;1-1-1, l10n_parent, l10n_diffsource, hidden;;1, name, doctors, --div--;LLL:EXT:cms/locallang_ttc.xlf:tabs.access, starttime, endtime'),
),
'palettes' => array(
'1' => array('showitem' => ''),
),
'columns' => array(
'sys_language_uid' => array(
'exclude' => 1,
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language',
'config' => array(
'type' => 'select',
'foreign_table' => 'sys_language',
'foreign_table_where' => 'ORDER BY sys_language.title',
'items' => array(
array('LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1),
array('LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0)
),
),
),
'l10n_parent' => array(
'displayCond' => 'FIELD:sys_language_uid:>:0',
'exclude' => 1,
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent',
'config' => array(
'type' => 'select',
'items' => array(
array('', 0),
),
'foreign_table' => 'tx_testmm_domain_model_clients',
'foreign_table_where' => 'AND tx_testmm_domain_model_clients.pid=###CURRENT_PID### AND tx_testmm_domain_model_clients.sys_language_uid IN (-1,0)',
),
),
'l10n_diffsource' => array(
'config' => array(
'type' => 'passthrough',
),
),
't3ver_label' => array(
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel',
'config' => array(
'type' => 'input',
'size' => 30,
'max' => 255,
)
),
'hidden' => array(
'exclude' => 1,
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden',
'config' => array(
'type' => 'check',
),
),
'starttime' => array(
'exclude' => 1,
'l10n_mode' => 'mergeIfNotBlank',
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.starttime',
'config' => array(
'type' => 'input',
'size' => 13,
'max' => 20,
'eval' => 'datetime',
'checkbox' => 0,
'default' => 0,
'range' => array(
'lower' => mktime(0, 0, 0, date('m'), date('d'), date('Y'))
),
),
),
'endtime' => array(
'exclude' => 1,
'l10n_mode' => 'mergeIfNotBlank',
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.endtime',
'config' => array(
'type' => 'input',
'size' => 13,
'max' => 20,
'eval' => 'datetime',
'checkbox' => 0,
'default' => 0,
'range' => array(
'lower' => mktime(0, 0, 0, date('m'), date('d'), date('Y'))
),
),
),
'name' => array(
'exclude' => 1,
'label' => 'LLL:EXT:testmm/Resources/Private/Language/locallang_db.xlf:tx_testmm_domain_model_clients.name',
'config' => array(
'type' => 'input',
'size' => 30,
'eval' => 'trim'
),
),
'doctors' => array(
'exclude' => 0,
'label' => 'docs',
'config' => array(
'type' => 'group',
'internal_type' => 'db',
'foreign_table' => 'tx_testmm_domain_model_doctors',
'allowed' => 'tx_testmm_domain_model_doctors',
'MM' => 'tx_testmm_doctors_clients_mm',
'size' => 10,
'maxitems' => 99999,
),
),
),
);
<?php
if (!defined ('TYPO3_MODE')) {
die ('Access denied.');
}
$GLOBALS['TCA']['tx_testmm_domain_model_doctors'] = array(
'ctrl' => $GLOBALS['TCA']['tx_testmm_domain_model_doctors']['ctrl'],
'interface' => array(
'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, name, clients',
),
'types' => array(
'1' => array('showitem' => 'sys_language_uid;;;;1-1-1, l10n_parent, l10n_diffsource, hidden;;1, name, clients, --div--;LLL:EXT:cms/locallang_ttc.xlf:tabs.access, starttime, endtime'),
),
'palettes' => array(
'1' => array('showitem' => ''),
),
'columns' => array(
'sys_language_uid' => array(
'exclude' => 1,
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language',
'config' => array(
'type' => 'select',
'foreign_table' => 'sys_language',
'foreign_table_where' => 'ORDER BY sys_language.title',
'items' => array(
array('LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1),
array('LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0)
),
),
),
'l10n_parent' => array(
'displayCond' => 'FIELD:sys_language_uid:>:0',
'exclude' => 1,
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent',
'config' => array(
'type' => 'select',
'items' => array(
array('', 0),
),
'foreign_table' => 'tx_testmm_domain_model_doctors',
'foreign_table_where' => 'AND tx_testmm_domain_model_doctors.pid=###CURRENT_PID### AND tx_testmm_domain_model_doctors.sys_language_uid IN (-1,0)',
),
),
'l10n_diffsource' => array(
'config' => array(
'type' => 'passthrough',
),
),
't3ver_label' => array(
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel',
'config' => array(
'type' => 'input',
'size' => 30,
'max' => 255,
)
),
'hidden' => array(
'exclude' => 1,
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden',
'config' => array(
'type' => 'check',
),
),
'starttime' => array(
'exclude' => 1,
'l10n_mode' => 'mergeIfNotBlank',
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.starttime',
'config' => array(
'type' => 'input',
'size' => 13,
'max' => 20,
'eval' => 'datetime',
'checkbox' => 0,
'default' => 0,
'range' => array(
'lower' => mktime(0, 0, 0, date('m'), date('d'), date('Y'))
),
),
),
'endtime' => array(
'exclude' => 1,
'l10n_mode' => 'mergeIfNotBlank',
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.endtime',
'config' => array(
'type' => 'input',
'size' => 13,
'max' => 20,
'eval' => 'datetime',
'checkbox' => 0,
'default' => 0,
'range' => array(
'lower' => mktime(0, 0, 0, date('m'), date('d'), date('Y'))
),
),
),
'name' => array(
'exclude' => 1,
'label' => 'LLL:EXT:testmm/Resources/Private/Language/locallang_db.xlf:tx_testmm_domain_model_doctors.name',
'config' => array(
'type' => 'input',
'size' => 30,
'eval' => 'trim'
),
),
'clients' => array(
'exclude' => 0,
'label' => 'clients',
'config' => array(
'type' => 'group',
'internal_type' => 'db',
'foreign_table' => 'tx_testmm_domain_model_clients',
'allowed' => 'tx_testmm_domain_model_clients',
'MM' => 'tx_testmm_doctors_clients_mm',
'MM_opposite_field' => 'doctors',
'size' => 10,
'maxitems' => 99999,
),
),
),
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment