[TYPO3-project-formidable] New Features in renderer template: Set your own errorWrap etc.

Hauke Hain newgrp at googlemail.com
Thu Feb 26 22:32:12 CET 2009


Hello,

template/errorTag as described here:
http://formidable.typo3.ug/reference/control/renderertemplate.html

Your errortag ({myerrortag.mytxt1.tag}) will be wrapped with
<span class="errors">{myerrortag.mytxt1}</span>


I changed the template renderer so that you can choose how it should be 
wrapped.

On top of that you can say that each errormessage gets wrapped even if you 
dosplay all at once with this code:
<div  style="display: {myerrortag.cssdisplay};">
{myerrortag} <!-- each error is wraped with the standard tag or your 
setting -->
</div>

This can be useful if you want to have your errormessages in a list.

So you can use this
<ul  style="display: {myerrortag.cssdisplay};">
<li  style="display: 
{myerrortag.renderlet1.cssdisplay};">{myerrortag.renderlet1}</li>
<li  style="display: 
{myerrortag.renderlet2.cssdisplay};">{myerrortag.renderlet2}</li>
<li  style="display: 
{myerrortag.renderlet3.cssdisplay};">{myerrortag.renderlet2}</li>
</ul>

or this code
<ul  style="display: {myerrortag.cssdisplay};">
{myerrortag} <!-- each error is wraped with the standard tag or your 
setting -->
</ul>

and this XML-Configuration:
<renderer:TEMPLATE>
   <template
    path=""
    subpart=""
    errorTag=""
    errorTagWrapAlways="True"
    errorTagCompiledNoBR="True">
    <errorTagWrap><![CDATA[<span>]]>|<![CDATA[</span>]]></errorTagWrap>
   </template>
  </renderer:TEMPLATE>

in order to get your errormessages in an unordered list.


As you can see I added one more configuration: errorTagCompiledNoBR="True"
If set, the compiled errormessages (all messages as one string) are not 
separated by a <br/>-Tag.
This is handy if you set a wrap that makes the br-Tag redundant or in worst 
case it makes your webpage invalid.


My Solution:
ameos_formidable\api\base\rdr_template\api\class.tx_rdrtemplate.php
I replaced row 133 to 140.
REPLACE:
    $aCompiledErrors[] = $this->oForm->_aValidationErrors[$sRdtName];
    $aErrors[$sShortRdtName] = $this->oForm->_aValidationErrors[$sRdtName];
    $aErrors[$sShortRdtName . "."]["tag"] = "<span class='errors'>" . 
$this->oForm->_aValidationErrors[$sRdtName] . "</span>";
   }
  }


  $aErrors["__compiled"] = implode("<br />", $aCompiledErrors);


WITH:
    $aErrors[$sShortRdtName] = 
$this->oForm->_aValidationErrors[$sRdtName];debug($this->_navConf);
    if(($errWrap = $this->_navConf("/template/errortagwrap")) !== FALSE) {

     if($this->oForm->isRunneable($errWrap)) {
      $errWrap = $this->callRunneable($errWrap);
     }

     $errWrap = $this->oForm->_substLLLInHtml($errWrap);
    } else {
      $errWrap = "<span class='errors'>|</span>";
    }
    $aErrors[$sShortRdtName . "."]["tag"] = str_replace("|", 
$this->oForm->_aValidationErrors[$sRdtName], $errWrap);
      if(strtolower(trim($this->_navConf("/template/errortagwrapalways"))) 
== "true") {
         $aCompiledErrors[] = str_replace("|", 
$this->oForm->_aValidationErrors[$sRdtName], $errWrap);
        } else {
         $aCompiledErrors[] = $this->oForm->_aValidationErrors[$sRdtName];
        }
   }
  }

    if(strtolower(trim($this->_navConf("/template/errortagcompilednobr"))) 
== "true") {
    $aErrors["__compiled"] = array();
      $aErrors["__compiled"] = implode($aCompiledErrors);
  } else {
      $aErrors["__compiled"] = implode("<br />", $aCompiledErrors);
    }


I added my new file. I hope this is something that can be applied to the 
svn-version.


Pleaso note that tjis works only with the renderer template. You have to 
make equally changes to the other renderlets, if you want the same 
functionality.

Perhaps the STANDARD renderer is interesting. Here you have to adjust the 
following lines:

You have to change ameos_formidable\api\base\rdr_std\api\class.tx_rdrstd.php 
in line 18-20:
  if(!$this->oForm->oDataHandler->_allIsValid()) {
   $sValidationErrors = "<div class='errors'><div class='error'>" . 
implode("</div><div class='error'>", 
$this->oForm->_aValidationErrorsByHtmlId) . "</div></div><hr 
class='separator' />";
  }


Regards,
Hauke 


More information about the TYPO3-project-formidable mailing list