[TYPO3-project-formidable] Template Engine: Bug when using isLoggedIn().isFalse() twice
Jerome Schneider
typo3dev at ameos.com
Fri Mar 6 15:20:39 CET 2009
Hi Hauke !
I reproduced the bug.
I just corrected it :) it took me 3 hours, but here is the correct pattern:
/\<\!\-\-.*(\#\#\#(.+)\
\bperimeter\b\#\#\#).*\-\-\>([^\1]*?)\<\!\-\-.*\1.*\-\-\>/
It's published in revision 2.0.236 (I have committed to SVN but not
built it as zip or T3X yet).
I tested it against this template, and everything was processed correctly.
I hope you can confirm the resolution. Thanks for reporting, btw !
Best regards,
Jerome Schneider
<!-- ###MAIN### begin-->
<h3>DEBUT</H3>
<!-- ###"hello".equals("world") perimeter### begin-->
<H2>NON 1</H2>
<!-- ###"hello".equals("world") perimeter### end-->
<h3>INTER1</H3>
<!-- ###"hello".equals("hello") perimeter### begin-->
<H2>OUI 1</H2>
<!-- ###"yes".equals("yes") perimeter### begin-->
<H2>OUI 1.1</H2>
<!-- ###"abc".equals("abc") perimeter### begin-->
<H2>OUI 1.1.1</H2>
<!-- ###"abc".equals("abc") perimeter### end-->
<!-- ###"abc".equals("xyz") perimeter### begin-->
<H2>NON 1.1.2</H2>
<!-- ###"abc".equals("xyz") perimeter### end-->
<!-- ###"abc".equals("abc") perimeter### begin-->
<H2>OUI 1.1.3</H2>
<!-- ###"abc".equals("abc") perimeter### end-->
<!-- ###"yes".equals("yes") perimeter### end-->
<!-- ###"yes".equals("no") perimeter### begin-->
<H2>NON 1.1</H2>
<!-- ###"yes".equals("no") perimeter### end-->
<!-- ###"hello".equals("hello") perimeter### end-->
<h3>INTER2</H3>
<!-- ###"hello".equals("world") perimeter### begin-->
<H2>NON 2</H2>
<!-- ###"hello".equals("world") perimeter### end-->
<h3>INTER3</H3>
<!-- ###"hello".equals("hello") perimeter### begin-->
<H2>OUI 2</H2>
<!-- ###"hello".equals("hello") perimeter### end-->
<h3>FIN</H3>
<!-- ###MAIN### end-->
Note
Hauke Hain a écrit :
> Hi,
>
> I am not quite sure why my templates does not work with formidable
> without changing the pattern.
>
> If I do not change it to $sPattern = '/\<\!\-\-.*(\#\#\#(.+)\
> \bperimeter\b\#\#\#).*begin\-\-\>([^\\1.]*)\<\!\-\-.*\\1.*end\-\-\>/';
> I do not get anything displayed.
>
> However, can you repeat the Bug? I think the whole thing would work with
> replace instead of using regular expressions, as TYPO3 uses it.
>
> If it is ok, you may change the $pattern to my version. It is a bit more
> specific and the groups are different. And it works for me only.
> On the other hand: Can you imagine why this happens to me? Perhaps you
> see something I don't (within the other posts in this thread).
>
> Thank you in advance.
>
> Kind regards,
> Hauke
>
> "Hauke Hain" <newgrp at googlemail.com> schrieb im Newsbeitrag
> news:mailman.1.1235588293.18628.typo3-project-formidable at lists.netfielders.de...
>
>> Regular Expressions are powerful, but not easy to understand.
>>
>> I do not understand how the function processPerimetersCallBack is called.
>>
>> It is calles via
>> $sHtml = preg_replace_callback(
>> $sPattern,
>> array(
>> &$this,
>> "processPerimetersCallBack"
>> ),
>> $sHtml,
>> -1 // no limit
>> );
>>
>> But how does it get its parameter?
>>
>>
>>
>> The problem with processPerimeters is, that Match[3] contents the
>> whole content from the first <!-- ###isLoggedIn().isFalse()
>> perimeter### begin--> to the last <!-- ###isLoggedIn().isFalse()
>> perimeter### end-->....
>>
>>
>> And sorry, I said a few hours ago, that this only happens with
>> isLoggedIn().isFalse() - it seems to happen with every condition
>> which is used more than once.
>>
>>
>>
>> I changed in the regular expression that not every a-z and A-Z
>> charackter is ok, but every charackter that is not the first
>> group-string:
>> [^\\1.]
>>
>> Replace
>> $sPattern = '/\<\!\-\-.*(\#\#\#(.+)\
>> \bperimeter\b\#\#\#).*begin\-\-\>([\w\W]*)\<\!\-\-.*\\1.*end\-\-\>/';
>> with
>> $sPattern = '/\<\!\-\-.*(\#\#\#(.+)\
>> \bperimeter\b\#\#\#).*begin\-\-\>([^\\1.]*)\<\!\-\-.*\\1.*end\-\-\>/';
>>
>>
>> Now everything is shown and nothing left, but *some* parts are shown,
>> that shouldn't.
>>
>> The first <!-- ###isLoggedIn().isFalse() perimeter### begin--> ...
>> <!-- ###isLoggedIn().isFalse() perimeter### end--> Part is shown or
>> hidden as it should be.
>>
>> The second Part is always shown.
>>
>> At least nothing is left anymore.
>>
>> I hope you can fix the rest. That was enough for today.
>>
>> Sincerely,
>> Hauke
>>
>
More information about the TYPO3-project-formidable
mailing list