how to define multi select element in zend framework2? - forms

i need to show multi select element in form. i use this:
$this->add(array(
'type' => 'Zend\Form\Element\Select',
'name' => 'services',
'attributes' => array(
'id' => 'state',
'multiple'=>true,
'options' => array(
'Web Design'=>'Web Design',
'Web Software'=>'Web Software',
'IT Solutions'=>'IT Solutions',
'SEO'=>'SEO',
),
),
'options' => array(
'label' => 'Services',
),
));
and define validator in my model:
$inputFilter->add($factory->createInput(array(
'name' => 'services',
'required' => false,
'validators' => array(
array(
'name' => 'NotEmpty',
),
),
)));
but when i validate form with $form->isValid() in my controller, it return false.
What do I do?

Try that
$inputFilter->add($factory->createInput(array(
'name' => 'services',
'required' => false,
'allowEmpty' => true
)));

Related

Extending tt_content with inline element, element is not attached

I created an extension in TYPO3 9.5 for adding multiple elements from another table to tt_content with type "inline" (IRRE) according to the tutorial.
I can add new inline elements to a content element in backend but as I am saving them, they are not attached to the tt_content element. But I can see them as records in the list view. Only the connection between the two elements are missing.
The definition of the additional field for tt_content:
CREATE TABLE tt_content (
tx_jrinterview_question_answer int(11) DEFAULT '0' NOT NULL
);
The definition of the new records table:
CREATE TABLE tx_jrinterview_question_answer (
parentid int(11) DEFAULT '0' NOT NULL,
parenttable varchar(255) DEFAULT '' NOT NULL,
question varchar(255) DEFAULT '' NOT NULL,
answer text
);
The TCA part for tt_content to add the IRRE functionality:
'tx_jrinterview_question_answer' => [
'exclude' => true,
'label' => 'Questions and Answers',
'config' => [
'type' => 'inline',
'allowed' => 'tx_jrinterview_question_answer',
'foreign_table' => 'tx_jrinterview_question_answer',
'foreign_field' => 'parentid',
'foreign_table_field' => 'parenttable',
'minitems' => 0,
'maxitems' => 99,
],
],
],
And the TCA for the new record:
<?php
return [
'ctrl' => [
'title' => 'Question and answer',
'label' => 'question',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'versioningWS' => true,
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'transOrigDiffSourceField' => 'l10n_diffsource',
'delete' => 'deleted',
'enablecolumns' => [
'disabled' => 'hidden',
'starttime' => 'starttime',
'endtime' => 'endtime',
],
'searchFields' => 'question,answer',
],
'interface' => [
'showRecordFieldList' => 'parentid,parenttable,sys_language_uid, l10n_parent, l10n_diffsource, hidden, question, answer',
],
'types' => [
'0' => ['showitem' => 'parentid, parenttable, sys_language_uid, l10n_parent, l10n_diffsource, hidden, question, answer, --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime'],
],
'columns' => [
'pid' => [
'label' => 'Pid',
'config' => [
'type' => 'passthrough'
]
],
'crdate' => [
'label' => 'Crdate',
'config' => [
'type' => 'passthrough',
]
],
'tstamp' => [
'label' => 'Tstamp',
'config' => [
'type' => 'passthrough',
]
],
'sys_language_uid' => [
'exclude' => true,
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'special' => 'languages',
'items' => [
[
'LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages',
-1,
'flags-multiple'
]
],
'default' => 0,
],
],
'l10n_parent' => [
'displayCond' => 'FIELD:sys_language_uid:>:0',
'exclude' => true,
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'default' => 0,
'items' => [
['', 0],
],
'foreign_table' => 'tx_jrinterview_question_answer',
'foreign_table_where' => 'AND tx_jrinterview_question_answer.pid=###CURRENT_PID### AND tx_jrinterview_question_answer.sys_language_uid IN (-1,0)',
],
],
'l10n_diffsource' => [
'config' => [
'type' => 'passthrough',
],
],
't3ver_label' => [
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel',
'config' => [
'type' => 'input',
'size' => 30,
'max' => 255,
],
],
'hidden' => [
'exclude' => true,
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden',
'config' => [
'type' => 'check',
'items' => [
'1' => [
'0' => 'LLL:EXT:lang/locallang_core.xlf:labels.enabled'
]
],
],
],
'starttime' => [
'exclude' => true,
'behaviour' => [
'allowLanguageSynchronization' => true
],
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.starttime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'size' => 13,
'eval' => 'datetime',
'default' => 0,
],
],
'endtime' => [
'exclude' => true,
'behaviour' => [
'allowLanguageSynchronization' => true
],
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.endtime',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'size' => 13,
'eval' => 'datetime',
'default' => 0,
'range' => [
'upper' => mktime(0, 0, 0, 1, 1, 2038)
],
],
],
'parentid' => [
'exclude' => true,
'label' => 'parentid',
'config' => [
'type' => 'passthrough',
],
],
'parenttable' => [
'exclude' => true,
'label' => 'parenttable',
'config' => [
'type' => 'passthrough',
],
],
'question' => [
'exclude' => true,
'label' => 'question',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim'
],
],
'answer' => [
'exclude' => true,
'label' => 'answer',
'config' => [
'type' => 'text',
'cols' => 40,
'rows' => 15,
'eval' => 'trim'
]
],
],
];
Perhaps this has to be something with the language? If I change in the table directly the parentid and parenttable after creating it via IRRE, the record is shown.
Add more fields to your question/answer table.
In your ext_tables.sql
CREATE TABLE tx_jrinterview_question_answer (
uid int(11) NOT NULL auto_increment,
pid int(11) DEFAULT '0' NOT NULL,
tstamp int(11) DEFAULT '0' NOT NULL,
crdate int(11) DEFAULT '0' NOT NULL,
cruser_id int(11) DEFAULT '0' NOT NULL,
deleted tinyint(4) DEFAULT '0' NOT NULL,
hidden tinyint(4) DEFAULT '0' NOT NULL,
parentid int(11) DEFAULT '0' NOT NULL,
parenttable varchar(255) DEFAULT '' NOT NULL,
question varchar(255) DEFAULT '' NOT NULL,
answer text,
PRIMARY KEY (uid),
KEY parent (pid)
);
In your Configuration/TCA/tx_jrinterview_question_answer.php
<?php
defined('TYPO3_MODE') or die();
return [
'ctrl' => [
'title' => 'tx_jrinterview_question_answer',
'label' => 'question',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'delete' => 'deleted',
'enablecolumns' => [
'disabled' => 'hidden',
],
],
'interface' => [
'showRecordFieldList' => 'parentid,parenttable,question,answer'
],
'columns' => [
'pid' => [
'label' => 'Pid',
'config' => [
'type' => 'passthrough'
]
],
'crdate' => [
'label' => 'Crdate',
'config' => [
'type' => 'passthrough',
]
],
'tstamp' => [
'label' => 'Tstamp',
'config' => [
'type' => 'passthrough',
]
],
'hidden' => [
'exclude' => true,
'label' => 'Hidden',
'config' => [
'type' => 'check',
'default' => 0
]
],
'parentid' => [
'exclude' => true,
'label' => 'Parentid',
'config' => [
'type' => 'passthrough',
],
],
'parenttable' => [
'exclude' => true,
'label' => 'Parenttable',
'config' => [
'type' => 'passthrough',
],
],
'question' => [
'exclude' => true,
'label' => 'Question',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim'
],
],
'answer' => [
'exclude' => true,
'label' => 'Answer',
'config' => [
'type' => 'text',
'cols' => 40,
'rows' => 15,
'eval' => 'trim'
]
],
],
'types' => [
0 => [
'showitem' => 'parentid,parenttable,question,answer'
]
]
];
And the connection should be keept. I did test it.

Remove Action & Controller from url - EXT:news & RealURL

I'm having trouble removing /news/story/ from my URL's when using ext:news and real url.
What I'd like is:
www.mysite.com/en/news/this-is-my-story-title
And not:
www.mysite.com/en/news/story/this-is-my-story-title
Current page structure:
-root(1)
--Home (2)
--News (3)
---Story (4)
This is my manual realurl conf:
<?php
$GLOBALS['TYPO3_CONF_VARS']['FE']['addRootLineFields'] .= ',tx_realurl_pathsegment';
$domain = 'mysite.com';
$rootPageUid = 1;
$rssFeedPageType = 9818; // pageType of your RSS feed page
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl'][$domain] = [
'pagePath' => [
'type' => 'user',
'userFunc' => 'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main',
'spaceCharacter' => '-',
'languageGetVar' => 'L',
'expireDays' => '3',
'rootpage_id' => $rootPageUid,
'firstHitPathCache' => 1
],
'init' => [
'enableCHashCache' => true,
'respectSimulateStaticURLs' => 0,
'appendMissingSlash' => 'ifNotFile,redirect',
'adminJumpToBackend' => true,
'enableUrlDecodeCache' => true,
'enableUrlEncodeCache' => true,
'emptyUrlReturnValue' => '/',
],
'fileName' => [
'defaultToHTMLsuffixOnPrev' => 0,
'acceptHTMLsuffix' => 1,
'index' => [
'feed.rss' => [
'keyValues' => [
'type' => $rssFeedPageType,
]
]
]
],
'preVars' => array(
0 => array(
'GETvar' => 'L',
'valueMap' => array(
'en' => 0,
'cy' => 1,
),
'noMatch' => 'bypass',
),
),
'fixedPostVars' => array(
'newsDetailConfiguration' => array(
array(
'GETvar' => 'tx_news_pi1[action]',
'valueMap' => array(
'story' => '',
),
'noMatch' => 'bypass'
),
array(
'GETvar' => 'tx_news_pi1[controller]',
'valueMap' => array(
'news' => '',
),
'noMatch' => 'bypass'
),
array(
'GETvar' => 'tx_news_pi1[news]',
'lookUpTable' => array(
'table' => 'tx_news_domain_model_news',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-'
),
'languageGetVar' => 'L',
'languageExceptionUids' => '',
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'autoUpdate' => 1,
'expireDays' => 180,
)
)
),
'newsCategoryConfiguration' => array(
array(
'GETvar' => 'tx_news_pi1[overwriteDemand][categories]',
'lookUpTable' => array(
'table' => 'sys_category',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-'
)
)
)
),
'newsTagConfiguration' => array(
array(
'GETvar' => 'tx_news_pi1[overwriteDemand][tags]',
'lookUpTable' => array(
'table' => 'tx_news_domain_model_tag',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-'
)
)
)
),
'4' => 'newsDetailConfiguration', // ID of the page with the news plugin detail view
),
'postVarSets' => [
'_DEFAULT' => [
'controller' => [
[
'GETvar' => 'tx_news_pi1[action]',
'noMatch' => 'bypass'
],
[
'GETvar' => 'tx_news_pi1[controller]',
'noMatch' => 'bypass'
]
],
'dateFilter' => [
[
'GETvar' => 'tx_news_pi1[overwriteDemand][year]',
],
[
'GETvar' => 'tx_news_pi1[overwriteDemand][month]',
],
],
'page' => [
[
'GETvar' => 'tx_news_pi1[#widget_0][currentPage]',
],
],
],
],
];
Using TYPO3 v8.7.15,RealURL 2.3 and News v7.0.4
RealUrl is set to use my manual conf file also.
Thanks again T3 community
realUrl Provide pretty nice option to exclude a page from URL segment. For that go to Page-> property->General. You will find an option Exclude from speaking URL check this Screenshot.
In your case go to story page and exclude this from URL
-root(1)
--Home (2)
--News (3)
---Story (4) // Exclude from realUrl
That's it, this what you're actually looking for!
Greetings!

Typo3 FAL missing alternative text field in Extension

i am using FAL in my Extension and cant get the alternative field showing.
Please look at these 2 images to have a better view:
Image 1: This is the view in my extension
Image 2: This view is in Typo3 Page Ressource Tab
As you can see the image is working fine, so its not this problem: TYPO3 fal upload image with alt-text.
Here is my TCA code:
'images' => array(
'exclude' => 1,
'label' => 'LLL:EXT:fy_reference/Resources/Private/Language/locallang_db.xlf:tx_fyreference_domain_model_reference.images',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('image', array(
'appearance' => array(
'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference'
),
'minitems' => 0,
'maxitems' => 9999,
), $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']),
'files' => array(
'exclude' => 1,
'label' => 'Files',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('files', array(
'appearance' => array(
'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference'
),
), $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']),
),
),
Any advise will be thankful.
Found the solution thanks to: TYPO3 FAL: enable Alt text and Link for custom domain field and https://forge.typo3.org/issues/56884
It seems that I have overread the answere.
Here is the complete TCA:
'images' => array(
'exclude' => 1,
'label' => 'LLL:EXT:fy_reference/Resources/Private/Language/locallang_db.xlf:tx_fyreference_domain_model_reference.images',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('image', array(
'foreign_selector_fieldTcaOverride' => array(
'config' => array(
'appearance' => array(
'elementBrowserType' => 'file',
'elementBrowserAllowed' => 'gif,jpg,jpeg,tif,tiff,bmp,png'
)
)
),
'appearance' => array(
'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference',
),
'minitems' => 0,
'maxitems' => 9999,
'foreign_types' => array(
'0' => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
),
\TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
),
)
), $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']),
'files' => array(
'exclude' => 1,
'label' => 'Files',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('files', array(
'appearance' => array(
'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference'
),
), $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']),
),
),
Important is to add these line:
'foreign_types' => array(
'0' => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
),
\TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => array(
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
),
)
If you also want to limit the upload files type, you could use this:
'foreign_selector_fieldTcaOverride' => array(
'config' => array(
'appearance' => array(
'elementBrowserType' => 'file',
'elementBrowserAllowed' => 'gif,jpg,jpeg,tif,tiff,bmp,png'
)
)
),
You will get this:

ZF2 routing by subdomain (Hostname)

I added a subdomain on my myhost.com: reseller.myhost.com and I want it to route to my 'Reseller' module. I read this question :zend-framework-2-routing-subdomains-to-module
my reseller routing is this:
//Routing of User
'router' => array(
'routes' => array(
'Reseller' => array(
'type' => 'Hostname',
'options' => array(
'route' => 'reseller.myhost.com',
'constraints' => array(
),
'defaults' => array(
'controller' => 'Reseller\Controller\Reseller',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'login' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/login',
'defaults' => array(
'action' => 'login',
),
),
),
'createAd' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/createAd',
'defaults' => array(
'action' => 'createAd',
),
),
),
),
)
))
I expect to it go to the Reseller index action, but it instead goes to Application's index action. What should i do?
If I visit url reseller.myhost.com/login everything is ok, but if i call reseller.myhost.com it goes to index of application module.

TYPO3 news system and RealURL

I have a little problem with the TYPO3 extension News System and Real URL.
Its not showing the urls like
http://codem.dk/blog/artikel/usunde_energidrikke
but showing it like
http://codem.dk/blog/artikel/?tx_news_pi1[news]=5&cHash=5370a02c0dc7e653fede425de7ac9187
I have added the plugin code in my realurl file, so i don't know what's wrong, and all other links which are not linking to a news are working fine.
In the Extension Manager for Real Url I have this path to the configuration file:
typo3conf/realurl.php
Can someone see, what's wrong here?
Im running TYPO3 v. 6.1 with FLUID/EXTBASE.
The realurl.php file looks like this:
<?php
$TYPO3_CONF_VARS['FE']['addRootLineFields'].= ',tx_realurl_pathsegment';
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'] = array(
'pagePath' => array(
'type' => 'user',
'userFunc' => 'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main',
'spaceCharacter' => '-',
'languageGetVar' => 'L',
'expireDays' => '3',
'rootpage_id' => 1,
'firstHitPathCache'=>1
),
'init' => array(
'enableCHashCache' => TRUE,
'enableCHashCache' => 1,
'respectSimulateStaticURLs' => 0,
'enableUrlDecodeCache' => 1,
'enableUrlEncodeCache' => 1
),
'preVars' => array(
array(
'GETvar' => 'L',
'valueMap' => array(
'en' => '1',
),
'noMatch' => 'bypass',
),
array(
'GETvar' => 'no_cache',
'valueMap' => array(
'nc' => 1,
),
'noMatch' => 'bypass',
),
),
'fixedPostVars' => array(
'newsDetailConfiguration' => array(
array(
'GETvar' => 'tx_news_pi1[news]',
'lookUpTable' => array(
'table' => 'tx_news_domain_model_news',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-'
),
'languageGetVar' => 'L',
'languageExceptionUids' => '',
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'autoUpdate' => 1,
'expireDays' => 180,
)
)
),
'newsCategoryConfiguration' => array(
array(
'GETvar' => 'tx_news_pi1[overwriteDemand][categories]',
'lookUpTable' => array(
'table' => 'tx_news_domain_model_category',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-'
)
)
)
),
'newsTagConfiguration' => array(
array(
'GETvar' => 'tx_news_pi1[overwriteDemand][tags]',
'lookUpTable' => array(
'table' => 'tx_news_domain_model_tag',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-'
)
)
)
),
'52' => 'newsDetailConfiguration',
'701' => 'newsDetailConfiguration', // For additional detail pages, add their uid as well
'71' => 'newsTagConfiguration',
'72' => 'newsCategoryConfiguration',
),
'postVarSets' => array(
'_DEFAULT' => array(
'controller' => array(
array(
'GETvar' => 'tx_news_pi1[action]',
'noMatch' => 'bypass'
),
array(
'GETvar' => 'tx_news_pi1[controller]',
'noMatch' => 'bypass'
)
),
'dateFilter' => array(
array(
'GETvar' => 'tx_news_pi1[overwriteDemand][year]',
),
array(
'GETvar' => 'tx_news_pi1[overwriteDemand][month]',
),
),
'page' => array(
array(
'GETvar' => 'tx_news_pi1[#widget_0][currentPage]',
),
),
),
),
);
?>
(Real URL Setup in Extension-manager)
I believe you have to edit the file ext_localconf.php in order to have real urls. Can you edit the file and add this code and tell me the results?
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT']['postVarSets']['_DEFAULT']['action'] = array(
array(
'GETvar' => 'tx_news_pi1[controller]',
),
array(
'GETvar' => 'tx_news_pi1[action]',
),
);
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT']['postVarSets']['_DEFAULT']['news'] = array(
array(
'GETvar' => 'tx_news_pi1[news]',
'lookUpTable' => array(
'table' => 'tx_news_domain_model_news',
'id_field' => 'title',
'alias_field' => 'name',
'addWhereClause' => 'AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-',
),
'enable404forInvalidAlias' => '1',
),
)
);
The file is located in root_folder/typo3conf/ext/news.
Note: Remember to clear cache right after you change and save the file.
To get title in your link instead of the uid (codem.dk/blog/artikel/news/5), change the following:
'table' => 'tx_news_domain_model_news',
'id_field' => 'uid',
'alias_field' => 'title',