PITS Blog
  • Home
  • Services
    • Dedicated team Have your own development team at our location in Kerala, India. We tailor our employees individually to your project.
    • Website & web shop Get into the online business and sell your products around the clock. Or convince yourself with a modern website on desktop and mobile devices.
    • Application development We develop very individual web or software applications for you for a wide variety of needs.
    • Hybrid or native iOS & Android Apps Online business is often done on the go today, and the trend is rising. Invest now and make your software mobile-compatible.
  • Credentials
  • Technology
  • Process
  • About us
  • Contact
  • White papers
  • Jobs
  • Blog
  • Startups
�
Avatar

Creating dynamic fields with typo3 powermail 2.x

By Sivaprasad S on December, 24 2014
demo post

By Visakh R N

WordPress and .NET

By Priyanka K

Roadmap to become a DevOps Engineer

By Francis Varghese

Gutenberg - More Than Just An Editor

By Priyanka K

With the new upgrade to powermial 2.x , It has become more complicated to create custom/dynamic fields in powermail 2.x . But with “Create from TypoScript” option, this point is now considerably easier to implement.

Create a form in powermail 2.x and add some page under that form. Once page creation is done add some fields inside that page. Now if you want to add dynamic checkboxes or radio buttons or select options then add a new field of type checkboxes/radio buttons/select, select extended tab and inside that there is an option “Create from TypoScript”.In that field add an appropriate typscript variable name and save the form eg:lib.products. See below image

[TYPO3 CMS 6.2.6] 2014-12-23 17-06-26

  lib.products = CONTENT
  lib.products {
    table = pages 
    select {
      pidInList = xxx
    }
  renderObj = COA
  renderObj {
   10 = COA
   10 {
   10 = TEXT
   10.dataWrap = {field:title}[\n]
  }
 }
}

above typoscript will render pages under a particular pageId in a select box/radio button/checkboxes(According to the type we selected for the field) inside a powermail form.

If your requirement is to make a cusotm field in powermail and then create dynamic values inside that particlaur field using your extension, then we have to use the signal slot formActionBeforeRenderView available in powermial 2.x.

screenshot-docs typo3 org 2014-12-24 13-01-28

To create a new field type in powermial 2.x ,Either you can edit the page and add the below line of code in page TSconfig field or you can include this using your extension itself.

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig('
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ExtensionName/Configuration/TypoScript/pageTsConfig.ts">
'); 
  tx_powermail.flexForm.type.addFieldOptions.new = Name of the field
  tx_powermail.flexForm.type.addFieldOptions.new.dataType = 1

screenshot-192 168 0 207 8080 2014-12-24 13-10-54

In ext_localconf.php add below line of code

$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\SignalSlot\Dispatcher');
$signalSlotDispatcher->connect(
	'In2code\Powermail\Controller\FormController','formActionBeforeRenderView',
	'Vender\Extension\Controller\FormController','yourFunctionName',FALSE);

If someone chose the new field, powermail searches by default for a Partial with Name New.html and default path is powermail/Resources/Private/Partials/Form/New.html.Since modifying the powermail extension is not a good practice we can add new partials and tell powermail, where to find the new partial:

plugin.tx_powermail.view {
   partialRootPath >
   partialRootPaths {
      10 = EXT:powermail/Resources/Private/Partials/
      20 = EXT:extension_name/Resources/Private/Partials/
   }
}

and in EXT:extension_name/Resources/Private/Partials/New.html you can add add the html code to render chceckbox/radio/select box templates.(please check EXT:powermail/Resources/Private/Partials/ for more details).

Now some more minor things to be done in Typoscript part .

lib.products = CONTENT
lib.products { 
    table = tx_your_tablename
    select { 
      pidInList = 26506
      orderBy = name
      where = sid = ###sid###
      orderBy = ###sortfield###
      andWhere = if some additioanl condition is there
      markers {
        sid.data = sid
        sortfield.value = uid
      }
     } 
    renderObj = COA
    renderObj { 
      10  = COA
      10  { 
      	10= TEXT
        10.dataWrap ={field:name} CHF {field:price}[\n] 
      } 
    } 
  }

add the above code in typoscript template and save it . Now back to PHP side . In your extended FormController.php (insider your extension/Classes/Controller) add below code

         /**
	 * @param \In2code\Powermail\Domain\Model\Form $form
	 * @param \In2code\Powermail\Controller\FormController $pObj
	 */
	public function manipulateMailObjectOnCreate($form, $pObj) {
		foreach ( $form as $forms ){
		  foreach( $forms->getPages() as $key => $pages){
                      foreach ( $pages->getFields() as $fields ){
			switch ( $fields->getType() ){
				case "new":
					$fields->setMandatory(TRUE);
		                        $fields->setCreateFromTyposcript('lib.products');
					break;
					}
				}
			}
		}
	}

.

This will create dynamic fields inside powermail.

We'd love to hear from you.

Contact us

Switzerland
thomas(at)pitsolutions(dot)com
+41 (0) 43 558 4360

India
enquiries(at)pitsolutions(dot)com
+91 (0) 471 270 0615 / 715

UAE
mohammed(at)pitsolutions(dot)com
+971 (0) 4 359 8610

USA
arnab(at)pitsolutions(dot)com
+1 (0) 703 945 8076

Copyright © 2019PIT Solutions AG.An ISO 9001:2015 certified company. All Rights Reserved

SCROLL TO TOP