Hi Yaron,
The code to enable the table display on PracticalPlants resides in a separate 
skin-companion extension, but I'd be glad to extend the functionality to offer 
a table view baked into the core.

How do you envision table headers being defined? Something like....

{{{for template|Reference|multiple|display=table|table 
headers=One;Two;Three;Four;Five;etc}}}

Andru


El 30/10/2012, a las 17:15, Yaron Koren escribió:

> Hi Andru,
> 
> One has to register to see the form link you included, but I'm glad I did, 
> because that form looks great! Turning a multiple-instance template form 
> section into a spreadsheet-like interface is a fairly obvious enhancement 
> that I, and other people, have wanted for a long time. So however we can get 
> this functionality into SF, I think it would be great.
> 
> I guess there are two issues: how to make SF's display of multiple-instance 
> templates extensible so that it can allow further customizations like yours, 
> and how to specifically add this kind of spreadsheet/table display. (You 
> could argue that there's a third issue, of how to make all of SF's HTML 
> display more extensible.)
> 
> For the 2nd issue, I could imagine that there could be a new parameter, like 
> "display=", so that one could call something like the following:
> 
> {{{for template|Reference|multiple|display=table}}} (or "spreadsheet")
> 
> I only skimmed through your code, but I assume the code you added to enable 
> this specific display is outside of the SF code, and possibly hardcoded for 
> your specific data structure? If so, what do you think about the idea of 
> adding this kind of thing directly into Semantic Forms, in addition to the 
> new hooks?
> 
> -Yaron
> 
> On Tue, Oct 30, 2012 at 9:29 AM, Andru Vallance <an...@tinymighty.com> wrote:
> I inadvertently sent this from the wrong email account earlier, and it seems 
> to have vanished into a black hole. I'm resending again, from the correct 
> email account. My apologies if the other turns up as a duplicate.
> 
> Hello,
> For my work on Practical Plants (http://practicalplants.org/wiki), I needed 
> to be able to control the HTML which was output by multiple template 
> instances. Currently the HTML is hardcoded within the SF parser and there are 
> no hooks available to modify it's output. While my need may be a fringe case, 
> I think hardcoded HTML with no way to override it encourages hacking the core 
> files: A Very Bad Thing. I'd like to submit my changes for inclusion into SF 
> core, so I'm looking for feedback on the changes I'm proposing. I've attached 
> a patch for SF_FormPrinter.php and SemanticForms.php and a new class file 
> SF_MultipleTemplate.php, at the end of this email. 
> 
> I've made the following SF hooks available to modify the HTML output of a 
> multiple template instance. In order to make these hooks flexible, I wanted 
> to be able to supply an object instance which contained information about the 
> Multiple Template Instance being parsed. To do this, I extracted most of the 
> logic for outputting multiple template instances into a new class 
> SFMultipleTemplate which is responsible for defining the default HTML (which 
> is currently hardcoded in SFFormPrinter),  and for running the following 
> hooks, which it passes the default html by reference to allow for 
> modification, and the SFMultipleTemplate instance which is calling the hook, 
> to give access to data about the Multiple Template Instance in question.
> 
> Here are the hooks I've created, based on the default HTML currently used.
> 
> sfMultipleInstanceTemplateBeforeHTML (String &$html, SFMultipleTemplate 
> $template)
> Allows the customisation of the HTML which is output before the list of 
> template instances. 
> 
> sfMultipleInstanceTemplateAfterHTML (String &$html, SFMultipleTemplate 
> $template)
> Allows the customisation of the HTML which is output after the list of 
> template instances.
> 
> sfMultipleInstanceTemplateHTML (String &$html, String $content, 
> SFMultipleTemplate $template)
> Allows the customisation of the html which wraps a multiple template instance 
> item.
> 
> sfMultipleInstanceTemplateAdderHTML (String &$html, String $content, 
> SFMultipleTemplate $template)
> Same as above, except this sets the hidden multiple template instance item 
> which is cloned by the frontend javascript when the add button is clicked.
> 
> sfMultipleInstanceTemplateInnerHTML (String &$html, String $section, 
> SFMultipleTemplate $template)
> Allows the customisation of the html of the multiple template instance item. 
> The html returned by this must contain the close and reorder icons. Passing 
> some isolated default html for those icons, or providing get methods in 
> SFMultipleTemplate might be a good idea.
> 
> 
> 
> Practical Plants Use Case
> I use these hooks to render multiple template instance items as rows of a 
> table for my references. You can see it in action here:
> 
> http://practicalplants.org/w/index.php?title=Malus_domestica&action=formedit#References
> 
> This is implemented with the following hook handlers in my skin's related 
> extension. Note that by extracting the Multiple Template Instance 
> functionality into an object, I am able to check the template name to 
> customise output on a per-instance basis. 
> 
>       function sfMultipleInstanceTemplateBeforeHTML(&$html, $template){
>               if($template->template_name === 'Reference'){
>                       $html = '
>                       <div class="multipleTemplateWrapper">
>                       <table class="table">
>                       <thead>
>                               <th class="ref-type">Type</th>
>                               <th class="ref-id">Identifier</th>
>                               <th class="ref-author">Author</th>
>                               <th class="ref-title">Title</th>
>                               <th class="ref-source">Source</th>
>                               <th class="ref-url">URL/ISBN</th>
>                               <th class="ref-date">Date</th>
>                               <th class="ref-buttons"></th>
>                       </thead>
>                       <tbody class="multipleTemplateList">';
>               }
>               return true;
>       }
>       function sfMultipleInstanceTemplateAfterHTML(&$html, $template){
>               if($template->template_name === 'Reference'){
>                       $html = '</tbody></table>';
>                       $html .= $template->addButtonHTML();
>                       $html .= '</div>';
>               }
>               return true;
>       }
>       function sfMultipleInstanceTemplateHTML(&$html, $content, $template){
>               if($template->template_name === 'Reference'){
>                       $html = '<tr class="multipleTemplateInstance 
> multipleTemplate">'.$content.'</tr>';
>               }
>               return true;
>       }
> 
>       function sfMultipleInstanceTemplateAdderHTML(&$html, $content, 
> $template){
>               if($template->template_name === 'Reference'){
>                       $html = '<tr class="multipleTemplateStarter" 
> style="display:none">'.$content.'</tr>';
>               }
>               return true;
>       }
> 
>       function sfMultipleInstanceTemplateInnerHTML(&$html, $section, 
> $template){
>               global $sfgScriptPath;
>               if($template->template_name === 'Reference'){
>   //we have to str_replace some faux td elements since mediawiki doesn't 
> allow <td> elements in wikitext without an enclosing table element
>               $html =   str_replace('-!/td!-','</td>',str_replace('-!td!-', 
> '<td>', $section)).'<td>'
>                               . '<span class="removeButton"><a class="btn 
> btn-link remover"><i class="icon-remove"></i></a></span>'
>                               . '<span class="instanceRearranger"><img 
> src="'.$sfgScriptPath.'/skins/rearranger.png" class="rearrangerImage"></span>'
>                               . '</td>';
>               }
>               return true;
>       }
> 
> 
> 
> 
> 
> Patch for SF_FormPrinter.php
> 
> 
> 
> Patch for SemanticForms.php
> 
> 
> 
> New class file SF_MultipleTemplate.php
> 
> 
> 
> 
> Any feedback would be appreciated. I'd love to have this included in the core 
> so I can implement the functionality I need without having a custom core hack!
> 
> Thanks
> Andru Vallance
> PracticalPlants.org
> 
> 
> 
> ------------------------------------------------------------------------------
> Everyone hates slow websites. So do we.
> Make your web apps faster with AppDynamics
> Download AppDynamics Lite for free today:
> http://p.sf.net/sfu/appdyn_sfd2d_oct
> _______________________________________________
> Semediawiki-devel mailing list
> Semediawiki-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/semediawiki-devel
> 
> 
> 
> 
> -- 
> WikiWorks · MediaWiki Consulting · http://wikiworks.com

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct
_______________________________________________
Semediawiki-devel mailing list
Semediawiki-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/semediawiki-devel

Reply via email to