typo3typo3-8.xpowermail

Powermail: create fields from entries in database


My problem:

i need a matrix of fields in Powermail:

product_1 - price_1 - number_1
product_2 - price_2 - number_2
product_3 - price_3 - number_3

and so on. No problem to create this fields manually, but i need it derived from a database. The numbers of lines depends on the number of entries in the database.

is there a possibility to create fields "on the fly", perhaps by typoscript or a userfunc?

Thanks!


Solution

  • I would create a new field type an call it (e.g.) productsheet. In the manual there is an example how to do it: https://docs.typo3.org/typo3cms/extensions/powermail/ForDevelopers/AddNewFields/Index.html

    Here two example page TSConfig lines for the new field:

    # Add new fields
    tx_powermail.flexForm.type.addFieldOptions.productsheet = Product Fields
    tx_powermail.flexForm.type.addFieldOptions.productsheet.dataType = 1

    Here is an example Productsheet.html partial file for this:

    {namespace vh=In2code\Powermail\ViewHelpers}
    
    <h2><vh:string.escapeLabels>{field.title}</vh:string.escapeLabels><f:if condition="{field.mandatory}"><span class="mandatory">*</span></f:if></h2>
    
    <table>
    	<thead>
    	<tr>
    		<th scope="col">Menge</th>
    		<th scope="col">Artikel Nr.</th>
    		<th scope="col">Bezeichnung</th>
    		<th scope="col">Preis Fr./m</th>
    	</tr>
    	</thead>
    	<tbody>
    
    	<f:for each="{0:1,1:2,2:3,3:4,4:5,5:6,6:7,7:8,8:9,9:10}" as="key">
    		<tr>
    			<td>
    				<f:form.textfield type="number" class="mdl-textfield__input " name="field[{field.marker}][amount_{key}]" value="" />
    			</td>
    			<td>
    				<f:form.textfield class="mdl-textfield__input " name="field[{field.marker}][article_no_{key}]" value="" />
    			</td>
    			<td>
    				<f:form.textfield class="mdl-textfield__input " name="field[{field.marker}][description_{key}]" value="" />
    			</td>
    			<td>
    				<f:form.textfield class="mdl-textfield__input " name="field[{field.marker}][price_{key}]" value="" />
    			</td>
    		</tr>
    	</f:for>
    	</tbody>
    </table>

    Next step would be to insert fields - as you wrote - on the fly. So what about inserting an own viewhelper instead of defining a hardcoded array in the Now you could prefill the fields with value="" by your own.

    Hope that helps