| rudy demo
                                                                                                                             | Monday 04 April 2005 3:25:37 am 
                                                                 
OK, Xavier, here's my pick then:1. We should now have 3 filter options (Node), (class) , and (node and class).
 2. I supposed the following(also deducing from your code :-)
 2.1 if (Node) => All objects below that node(LIST fetch)
 2.2 if (Class) => All objects of (Class) below the root node (2)(TREE fetch)
 2.3 if (Node and Class) => All objects of (Class) below (Node)(LIST fetch)
 
Even, implemented like this for the time being, I would recommend the followings:1. Let the user choose if he wants a list of tree by recording this in the datatype
 2. Allow to select multiple nodes
 
I would really pleased to update the TPL script part for you, if you implement these two features in the PHP part.These two extra-features really open up the possibilities of your datatype.
 
Back to the code, I added a new dadatype presentation too.<b>1. the class edit datatype</b>
 Please, note that I changed slightly the names of presentations so that they are technically more accurate(in my humble opinion, Xavier). So here are the changes...
 
<div class="element">
<label>{'Selection method'|i18n( 'design/standard/class/datatype' )}</label><div class="labelbreak"></div>
<select name="ContentClass_ezobjectrelation_selection_type_{$class_attribute.id}">
    <option value="4" {eq( $content.selection_type, 4 )|choose( '', 'selected="selected"' )}>{'Multiple select box'|i18n( 'design/standard/class/datatype' )}</option>
    <option value="3" {eq( $content.selection_type, 3 )|choose( '', 'selected="selected"' )}>{'Check boxes list'|i18n( 'design/standard/class/datatype' )}</option>
    <option value="1" {eq( $content.selection_type, 1 )|choose( '', 'selected="selected"' )}>{'Dropdown list'|i18n( 'design/standard/class/datatype' )}</option>
    <option value="2" {eq( $content.selection_type, 2 )|choose( '', 'selected="selected"' )}>{'Radio buttons list'|i18n( 'design/standard/class/datatype' )}</option>
{*    <option value="0" {eq( $content.selection_type, 0 )|choose( '', 'selected="selected"' )}>{'Browse'|i18n( 'design/standard/class/datatype' )}</option>*}
</select>
</div>
<b>2. content edit template</b> 
<fieldset>
{* DO NOT EDIT THIS FILE! Use an override template instead. *}
{default attribute_base=ContentObjectAttribute}
{let class_content=$attribute.contentclass_attribute.content}
{switch match=$class_content.selection_type}
{case match=0} {* Browse *}
This choice shouldn't show up. Please select another selection method, and inform me (xavier) on the forum about this message.
    {section show=$attribute.content}
        <p class="box">{content_view_gui view=text_linked content_object=$attribute.content}</p>
    {section-else}
        <p class="box">{"No relation"|i18n("design/standard/content/datatype")}</p>
    {/section}
    <input type="hidden" name="{$attribute_base}_data_object_relation_id_{$attribute.id}" value="{$attribute.data_int}" />
    {section show=$attribute.content}
        <input class="button" type="submit" name="BrowseObjectButton_{$attribute.id}" value="{'Replace object'|i18n('design/standard/content/datatype')}" />
        <input class="button" type="submit" name="RemoveObjectButton_{$attribute.id}" value="{'Remove object'|i18n('design/standard/content/datatype')}" />
    {section-else}
        <input class="button" type="submit" name="BrowseObjectButton_{$attribute.id}" value="{'Find object'|i18n('design/standard/content/datatype')}" />
    {/section}
    <input type="hidden" name="CustomActionButton[{$attribute.id}_set_object_relation]" value="{$attribute.id}" />
{/case}
{case match=1} {* Dropdown list *}
    <div class="buttonblock">
    <select name="{$attribute_base}_data_object_relation_id_list_{$attribute.id}[{cond(is_set($node.node_id),$node.node_id}]">
        {section show=$attribute.contentclass_attribute.is_required|not}
            <option value="" {section show=eq( $attribute.data_int, '' )}selected="selected"{/section}>{'No relation'|i18n( 'design/standard/content/datatype' )}</option>
        {/section}
        {let parent_node=fetch( content, node, hash( node_id, $class_content.default_selection_node ) )}
        {section var=node loop=fetch( content, list,
                                      hash( parent_node_id, $parent_node.node_id,
                                            sort_by, $parent_node.sort_array ) )}
            <option value="{$node.contentobject_id}" {$attribute.content.id_list|contains($node.contentobject_id)|choose( '', 'selected="selected"' )}>{$node.name|wash}</option>
        {/section}
        {/let}
    </select>
    </div>
{/case}
{case match=2} {* radio button *}
        {section show=$attribute.contentclass_attribute.is_required|not}
            <input type="radio" name="{$attribute_base}_data_object_relation_id_list_{$attribute.id}[single]" {section show=eq( $attribute.data_int, '' )}selected="selected"{/section}>{'No relation'|i18n( 'design/standard/content/datatype' )}</input><br />
        {/section}
        {let parent_node=fetch( content, node, hash( node_id, $class_content.default_selection_node ) )}
        {section var=node loop=fetch( content, list,
                                      hash( parent_node_id, $parent_node.node_id,
                                            sort_by, $parent_node.sort_array ) )}
           <input type="radio" name="{$attribute_base}_data_object_relation_id_list_{$attribute.id}[single]" value="{$node.contentobject_id}" {$attribute.content.id_list|contains($node.contentobject_id)|choose( '', 'checked="checked"' )}>{$node.name|wash}</input>  <br/>
        {/section}
        {/let}
{/case}
{case match=3} {* check box *}
{section show=$class_content.default_selection_node}
        {let parent_node=fetch( content, node, hash( node_id, $class_content.default_selection_node ) )}
        {section var=node loop=fetch( content, list,
                                      hash( parent_node_id, $parent_node.node_id,
                                            sort_by, $parent_node.sort_array ) )}
           <input type="checkbox" name="{$attribute_base}_data_object_relation_id_list_{$attribute.id}[{$node.node_id}]" value="{$node.contentobject_id}" {$attribute.content.id_list|contains($node.contentobject_id)|choose( '','checked="checked"' )}>{$node.name|wash}</input>  <br/>
        {/section}
        {/let}
{/section}
{section show=$class_content.filter_class}
{section var=node loop=fetch( 'content', 
        'tree', 
        hash( 'parent_node_id',     2,
              'class_filter_type',  'include',
              'class_filter_array', array( $class_content.filter_class ) ) )}
           <input type="checkbox" name="{$attribute_base}_data_object_relation_id_list_{$attribute.id}[{$node.node_id}]" value="{$node.contentobject_id}" {$attribute.content.id_list|contains($node.contentobject_id)|choose( '','checked="checked"' )}>{$node.name|wash}</input>  <br/>
        {/section}
{/section}
{*{$attribute.content|attribute(show)}*}
{/case}
{case match=4} {* list box*}
    <div class="buttonblock">
    <select name="{$attribute_base}_data_object_relation_id_list_{$attribute.id}[{cond(is_set($node.node_id),$node.node_id}]" size="$10" multiple>
        {section show=$attribute.contentclass_attribute.is_required|not}
            <option value="" {section show=eq( $attribute.data_int, '' )}selected="selected"{/section}>{'No relation'|i18n( 'design/standard/content/datatype' )}</option>
        {/section}
        {* parent_node is default_selection_node or root(2) *}
        {let parent_node=cond(is_set($class_content.default_selection_node),fetch( content, node, hash( node_id, $class_content.default_selection_node ) ),2)
        		 nodesList=cond(is_set($class_content.filter_class),
        		 					fetch( content, list,
                                      hash( parent_node_id, $parent_node.node_id,
                                            sort_by, $parent_node.sort_array ,
                                            class_filer_type,'include',
                                            class_filter_array, array($class_content.filter_class)) ),
                           fetch( content, list,
                                      hash( parent_node_id, $parent_node.node_id,
                                            sort_by, $parent_node.sort_array ) )
                           )
        }
        {section var=node loop=$nodesList}
            <option value="{$node.contentobject_id}" {$attribute.content.id_list|contains($node.contentobject_id)|choose( '', 'selected="selected"' )}>{$node.name|wash}</option>
        {/section}
        {/let}  
    </select>
    </div>  
{/case}
{/switch} 
{*Display objects marked for editing *}
<fieldset>
{section loop=$attribute.content.edit_id_list}
	ID: {$:item}
	{let object=fetch( content, object, hash( object_id, $:item) )}
	{section name=Attribute loop=$object.contentobject_attributes}
		<div class="block">
		{section show=$:item.display_info.edit.grouped_input}
				<fieldset>
				<legend>
					{$:item.contentclass_attribute.name}
				</legend>
					{attribute_edit_gui attribute_base=concat( $attribute_base, '_ezorl_edit_object_', $:item.contentobject_id ) html_class='half' attribute=$:item}
				</fieldset>
		{section-else}
				<label>
					{$:item.contentclass_attribute.name}:
				</label>
				{attribute_edit_gui attribute_base=concat( $attribute_base, '_ezorl_edit_object_', $:item.contentobject_id ) html_class='half' attribute=$:item}
		{/section}
	{/section}
	{/let}
{/section}
</fieldset>
{*End displaying objects marked for editing*}
<input class="button" type="submit" value="Create New" name="CustomActionButton[{$attribute.id}_new_object]" />
{/let}
{/default}
</fieldset>
Keep me posted about what you think of my suggestions please. |