[Frage] Powermail 2.0.x: Felder mit weiterer Eigenschaft ausstatten TYPO3-Version: -

  • einpraegsam.net einpraegs...
    MacGyver
    0 x
    9340 Beiträge
    80 Hilfreiche Beiträge
    10. 09. 2014, 00:12

    Weil ich gerade darüber gestolpert bin, hier eine kurze Anleitung, wie man ein neues Feld für powermail 2.0 für die Tabelle tx_powermail_domain_model_fields einfügen kann. Hier zeige ich, wie man einen Placeholder mit einbauen kann (btw. Placeholder sind standardmäßig ab powermail 2.1 mit an Board).

    Erforderlich ist eine weitere Extension - hier in Kurzform.

    EXT:ext/ext_typoscript_setup.txt

    1. config.tx_extbase{
    2. persistence{
    3. classes{
    4. Tx_Powermail_Domain_Model_Forms {
    5. subclasses {
    6. 0 = Tx_Ext_Domain_Model_Powermailform
    7. }
    8. }
    9. Tx_Powermail_Domain_Model_Pages {
    10. subclasses {
    11. 0 = Tx_Ext_Domain_Model_Powermailpage
    12. }
    13. }
    14. Tx_Powermail_Domain_Model_Fields {
    15. subclasses {
    16. 0 = Tx_Ext_Domain_Model_Powermailfield
    17. }
    18. }
    19. Tx_Ext_Domain_Model_Powermailform {
    20. mapping {
    21. tableName = tx_powermail_domain_model_forms
    22. }
    23. }
    24. Tx_Ext_Domain_Model_Powermailpage {
    25. mapping {
    26. tableName = tx_powermail_domain_model_pages
    27. }
    28. }
    29. Tx_Ext_Domain_Model_Powermailfield {
    30. mapping {
    31. tableName = tx_powermail_domain_model_fields
    32. }
    33. }
    34. }
    35. }
    36. objects {
    37. Tx_Powermail_Domain_Repository_FormsRepository.className = Tx_Ext_Domain_Repository_PowermailformRepository
    38. }
    39. }

    EXT:ext/ext_tables.sql

    1. #
    2. # Table structure for table 'tx_powermail_domain_model_fields'
    3. #
    4. CREATE TABLE tx_powermail_domain_model_fields (
    5. tx_ext_powermail_placeholder varchar(255) DEFAULT '' NOT NULL
    6. );

    EXT:ext/ext_tables.php

    1. t3lib_extMgm::addStaticFile($_EXTKEY, 'Configuration/TypoScript/', 'Main Template');
    2.  
    3. /**
    4.  * EXTEND TABLE: powermail (new placeholder-field - can eventually be replaced with new powermail functionality on powermail 2.1)
    5.  */
    6. t3lib_div::loadTCA('tx_powermail_domain_model_fields');
    7. $tempColumns = array (
    8. # show new placeholder field
    9. 'tx_ext_powermail_placeholder' => array (
    10. 'exclude' => 1,
    11. 'label' => 'LLL:EXT:ext/locallang_db.xml:powermail.tx_ext_powermail_placeholder',
    12. 'config' => array (
    13. 'type' => 'input',
    14. 'size' => 30,
    15. 'eval' => 'trim'
    16. )
    17. ),
    18. );
    19.  
    20. t3lib_extMgm::addTCAcolumns('tx_powermail_domain_model_fields',$tempColumns,1);
    21. t3lib_extMgm::addToAllTCAtypes('tx_powermail_domain_model_fields','tx_ext_powermail_placeholder', '', 'after:title');

    EXT:ext/Configuration/TypoScript/setup.txt

    1. plugin.tx_powermail {
    2. view {
    3. templateRootPath = EXT:ext/Resources/Private/Templates/
    4. partialRootPath = EXT:ext/Resources/Private/Partials/
    5. layoutRootPath = EXT:ext/Resources/Private/Layouts/
    6. }
    7. }

    EXT:ext/Classes/Domain/Model/Powermailfield.php

    1. <?php
    2.  
    3. /**
    4.  * Class Tx_Ext_Domain_Model_Powermailfield
    5.  *
    6.  * Extends the fields model of powermail
    7.  */
    8. class Tx_Ext_Domain_Model_Powermailfield extends Tx_Powermail_Domain_Model_Fields {
    9.  
    10. /**
    11. * attribute for placeholder field
    12. *
    13. * @var string $txExtPowermailPlaceholder
    14. */
    15. protected $txExtPowermailPlaceholder;
    16.  
    17.  
    18. /**
    19. * Returns the placeholder
    20. *
    21. * @return string $txExtPowermailPlaceholder
    22. */
    23. public function getTxExtPowermailPlaceholder() {
    24. return $this->txExtPowermailPlaceholder;
    25. }
    26.  
    27. /**
    28. * Sets the placeholder
    29. *
    30. * @param string $txExtPowermailPlaceholder
    31. * @return void
    32. */
    33. public function SetTxExtPowermailPlaceholder($txExtPowermailPlaceholder) {
    34. $this->txExtPowermailPlaceholder = $txExtPowermailPlaceholder;
    35. }
    36. }

    EXT:ext/Classes/Domain/Model/Powermailform.php

    1. <?php
    2.  
    3. /**
    4.  *
    5.  *
    6.  * @package powermail
    7.  * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License, version 3 or later
    8.  *
    9.  */
    10. class Tx_Ext_Domain_Model_Powermailform extends Tx_Powermail_Domain_Model_Forms {
    11.  
    12. /**
    13. * pages
    14. *
    15. * @var Tx_Extbase_Persistence_ObjectStorage<Tx_Ext_Domain_Model_Powermailpage>
    16. */
    17. protected $pages = NULL;
    18.  
    19. /**
    20. * @param Tx_Extbase_Persistence_ObjectStorage $pages
    21. */
    22. public function setPages($pages) {
    23. $this->pages = $pages;
    24. }
    25.  
    26. /**
    27. * @return Tx_Extbase_Persistence_ObjectStorage
    28. */
    29. public function getPages() {
    30. return $this->pages;
    31. }
    32. }

    EXT:ext/Classes/Domain/Model/Powermailpage.php

    1. <?php
    2.  
    3. /**
    4.  *
    5.  *
    6.  * @package powermail
    7.  * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License, version 3 or later
    8.  *
    9.  */
    10. class Tx_Ext_Domain_Model_Powermailpage extends Tx_Powermail_Domain_Model_Pages {
    11.  
    12. /**
    13. * Powermail Fields
    14. *
    15. * @var Tx_Extbase_Persistence_ObjectStorage<Tx_Ext_Domain_Model_Powermailfield>
    16. */
    17. protected $fields = NULL;
    18.  
    19. /**
    20. * @param Tx_Extbase_Persistence_ObjectStorage $fields
    21. */
    22. public function setFields($fields) {
    23. $this->fields = $fields;
    24. }
    25.  
    26. /**
    27. * @return Tx_Extbase_Persistence_ObjectStorage
    28. */
    29. public function getFields() {
    30. return $this->fields;
    31. }
    32. }

    EXT:ext/Classes/Domain/Model/Repository/PowermailformRepository.php

    1. <?php
    2.  
    3.  
    4. /**
    5.  * FormsRepository
    6.  *
    7.  * @package powermail
    8.  * @license http://www.gnu.org/licenses/lgpl.html
    9.  * GNU Lesser General Public License, version 3 or later
    10.  */
    11. class Tx_Ext_Domain_Repository_PowermailformRepository extends Tx_Powermail_Domain_Repository_FormsRepository {}

    Alle Templates, Partials und Layouts von Powermail müssten in die Extension kopiert werden (siehe Pfad im TypoScript oben).
    Hier ein Beispiel für den Partial Input.html mit Placeholder:

    1. {namespace vh=Tx_Powermail_ViewHelpers}
    2.  
    3. <div id="powermail_fieldwrap_{field.uid}" class="powermail_fieldwrap powermail_fieldwrap_text powermail_fieldwrap_{field.uid} {field.css} {field.marker} group">
    4. <label for="powermail_field_{field.marker}" class="powermail_label">
    5. {field.title}<f:if condition="{field.mandatory}"><span class="mandatory">*</span></f:if>
    6. </label>
    7. <f:if condition="{field.mandatory}">
    8. <f:then>
    9. <f:form.textfield id="powermail_field_{field.marker}" name="field[{field.uid}]" value="{vh:Misc.PrefillField(field: '{field}')}" class="powermail_field powermail_input {vh:Misc.ValidationClass(field: '{field}')} {vh:Misc.ErrorClass(field: '{field}', class: 'powermail_field_error')}" placeholder="{field.txExtPowermailPlaceholder}" required="{field.mandatory}" />
    10. </f:then>
    11. <f:else>
    12. <f:form.textfield id="powermail_field_{field.marker}" name="field[{field.uid}]" value="{vh:Misc.PrefillField(field: '{field}')}" class="powermail_field powermail_input {vh:Misc.ValidationClass(field: '{field}')} {vh:Misc.ErrorClass(field: '{field}', class: 'powermail_field_error')}" placeholder="{field.txExtPowermailPlaceholder}" />
    13. </f:else>
    14. </f:if>
    15. </div>

    Die Locallang Datei muss natürlich auch noch angelegt werden (siehe ext_tables.php).
    In dem Beispiel wollen wir mit dieser Extension die Template-Pfade von Powermail mit eigenen Pfaden überschreiben. Das funktioniert natürlich nur, wenn das Static Template von "ext" nach dem Static Template von "powermail" kommt!

    Ich hoffe ich habe in der Eile nichts übersehen beim Abtippen.

    Cheers, Alex

    in2code.de - Wir leben TYPO3
    - Möchtest du TYPO3 komplett verstehen? Eigene Erweiterungen erstellen? Bei uns gibt es auch Schulungen https://www.in2code.de/produkte/typo3-schulungen/
    - Die Arbeit mit TYPO3 macht dir Spaß? Du stehst auf Berge? Komm zu uns! https://www.in2code.de/agentur/karriere/


  • 1
  • einpraegsam.net einpraegs...
    MacGyver
    0 x
    9340 Beiträge
    80 Hilfreiche Beiträge
    11. 09. 2014, 16:30

    Und für powermail 2.1.x habe ich das in die Doku geschrieben:
    http://docs.typo3.org/typo3cms/extensions/powermail/ForDevelopers/AddNewFieldProperties/Index.html

    in2code.de - Wir leben TYPO3
    - Möchtest du TYPO3 komplett verstehen? Eigene Erweiterungen erstellen? Bei uns gibt es auch Schulungen https://www.in2code.de/produkte/typo3-schulungen/
    - Die Arbeit mit TYPO3 macht dir Spaß? Du stehst auf Berge? Komm zu uns! https://www.in2code.de/agentur/karriere/

  • haraldg haraldg
    Jar Jar Binks
    0 x
    1 Beiträge
    0 Hilfreiche Beiträge
    27. 10. 2014, 14:14

    Hi!
    Stehe mit der Lösung gerade etwas an, daher beim alten Beitrag angehängt: wenn ich so wie oben bzw. in der Doku beschrieben eine Eigenschaft hinzufüge, ist es beim Rendern des Formulars wie gewünscht verfügbar.
    Das Aber: in den partials, wo {powermail_all} zusammengebaut wird, steht die neue Eigenschaft nicht bereit. Die Debug-Ausgabe von {answer.field} zeigt auch, dass nicht die eigene Klasse verwendet wird, sondern das Original. Ich vermute mal, dass da nochmal einige andere Klassen überschrieben werden müssen, damit es auch über den Weg Mail -> Answers -> Field klappt, habe es aber leider nicht hinbekommen.
    Alles recht viel Aufwand für eine - auf den ersten Blick - Kleinigkeit... :-(

    Habt ihr da einen Tipp dazu?

    Danke, Harald

  • einpraegsam.net einpraegs...
    MacGyver
    0 x
    9340 Beiträge
    80 Hilfreiche Beiträge
    27. 10. 2014, 19:31

    Hallo,

    korrekt, das ist relativ viel Aufwand. Hier hat extbase definitiv ein Nachteil im Vergleich zur alten piBase Programmierung - dort hat ein "select * from ..." schon viel gerissen.

    Das hat aber nichts mit {powermail_all} zu tun. Dort steht standardmäßig nur label und value zur Verfügung.

    in2code.de - Wir leben TYPO3
    - Möchtest du TYPO3 komplett verstehen? Eigene Erweiterungen erstellen? Bei uns gibt es auch Schulungen https://www.in2code.de/produkte/typo3-schulungen/
    - Die Arbeit mit TYPO3 macht dir Spaß? Du stehst auf Berge? Komm zu uns! https://www.in2code.de/agentur/karriere/

  • 1