Re: HTTP_Template_Flexy Questions

From: Date: Mon, 09 Aug 2004 14:34:52 +0000
Subject: Re: HTTP_Template_Flexy Questions
References: 1 2 3  Groups: php.pear.general 
Request: Send a blank email to pear-general+get-14018@lists.php.net to get a copy of this message
Jamie Wall wrote:
Thanks! Another question: Is it possible to manipulate a dynamic element which has a variable in it?
At the moment, they are mutally exclusive : - use dynamic attributes: - cant use elements use element : - cant use dynamic attributes.. The problem is that the elements are rendered as $this->element['name']->toHtml(); and the element have no knowledge of dynamic values. It could be fixed I guess.. - probably worth filing as a bug.. (although fixes hapen faster with patches) it would probably involve having attributes['xxxx'] = array('....', array('getVar','$t->.....') and also passing $t to the object, so that it has something to render.. Regards Alan
Template: <mybutton id="CustomerButton" value="{customer.id}" flexy:dynamic="yes" /> Element Code: $elements=$template->getElements(); foreach ($elements as $elementName => $element) { if ($element->tag=='mybutton') {
       $buttonAttributes=array(
                'type'=>'button',
                'onclick'=>"javascript:doSomething()"
                );
$elements[$elementName]=new HTML_Template_Flexy_Element("input",
                                                           $buttonAttributes);
} It seems like I can't have any {} in my template for a dynamic element. Is there a way to have the {customer.id} expanded to its value before the element code takes place so I end up with: <input type="button" onclick="javascript:soSomething()" id="CustomerButton" value="26" /> instead of: <input type="button" onclick="javascript:soSomething()" id="CustomerButton" /> I see:
       // general assumption - none of the tools can do much with dynamic
       // attributes - eg. stuff with flexy tags in it.
       if (!is_string($this->ucAttributes[$key])) {
           return false;
       }
       $v = $this->ucAttributes[$key];
in the getAttribute() function of Tag.php which seems a bit discouraging. I think if I could have dynamic elements with variable template code in them, it would be like winning the lottery :-)! Jamie Wall http://www.webpeak.com 1(727)527-3646 Alan Knowles wrote:
Jamie Wall wrote:
First: I am really finding Flexy useful! Second: I have 2 questions concerning the use of Flexy: 1. Is there a way to use prefix/suffix with form tags? To make it work for me, I am modifying HTTP_Template_Flexy_Element method toHtmlNoClose() like: return "{$prefix}<{$ret->tag}".$ret->attributesToHTML() . '>' . $ret->childrenToHTML() . $suffix;
It would involve adding an extra call to the page: $this->elements['formName']->closeToHtml(); put it as a feature request on the package bug page.. - with code if you have time..
2. Is their a way to compile/output a string which contains the template instead of using a file on disk? I see: function compile(&$flexy,$string=false) in HTML_Template_Flexy_Compiler_Standard, but I also want mergeElement functionality which is in outputObject/bufferedOutputObject which seems to rely on a template on disk. I have it mostly working, but again I have to modify/subclass which doesn't seem right.
There is.. :) - although it's not normally recommended as the compiling stage is not very fast (eg. expect 100% CPU utilization on anything over 100 lines).. class StringCompiler extends HTML_Template_Flexy {
    var $compiledString;
    function StringCompiler($opts) {
        $opts['compileToString'] = true;
        parent::HTML_Template_Flexy($opts);
    }
    function compile($string) {
          $compiler = HTML_Template_Flexy_Compiler::factory($this->options);
       $this->compiledString =  $compiler->compile($x,$string);
    }
    function outputObject($t,$elements) {
        eval($this->compiledString);
    }
} you may want to look at the Flexy Source a bit more to add features, but the basic stuff should work by doing this.. Regards Alan
Thank you in advance. Jamie Wall http://www.webpeak.com 1(727)527-3646


« previous php.pear.general (#14018) next »