You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by Bruno Busco <br...@gmail.com> on 2009/11/28 16:15:12 UTC
How to check if a decorator-section is empty
Hi list,
could someone please tell me if there is any way to check in a screen
condition if a decorator section is empty?
I would like to do something similar to this:
<container style="contentarea">
<decorator-section-include name="pre-body"/>
<container id="column-container">
<section>
<condition>
<if-decorator-section-empty decorator-section="left-bar"/>
</condition>
<widgets>
<container id="content-main-section">
<decorator-section-include name="body"/>
</container>
</widgets>
<fail-widgets>
<container style="left">
<decorator-section-include name="left-bar"/>
</container>
<container id="content-main-section" style="leftonly">
<decorator-section-include name="body"/>
</container>
</fail-widgets>
</section>
</container>
Basically this is used to have the leftbar filled using a new
decorator-section defined in the GlobalDecorator and not using any
more the leftbarScreenName and leftbarScreenLocation so that for
instance the CommonCatalogDecorator would change from
<screen name="CommonCatalogDecorator">
<section>
<actions>
<set field="leftbarScreenName" value="leftbar"/>
<set field="leftbarScreenLocation"
value="component://product/widget/catalog/CommonScreens.xml"/>
<set field="MainColumnStyle" value="leftonly"/>
</actions>
<widgets>
<decorator-screen name="main-decorator"
location="${parameters.mainDecoratorLocation}">
<decorator-section name="pre-body">
<section>
<!-- do check for CATALOG, _VIEW permission -->
<condition>
<and>
..................
to
<screen name="CommonCatalogDecorator">
<section>
<widgets>
<decorator-screen name="main-decorator"
location="${parameters.mainDecoratorLocation}">
<decorator-section name="left-bar">
<include-screen name="leftbar"/>
</decorator-section>
<decorator-section name="pre-body">
<section>
<!-- do check for CATALOG, _VIEW permission -->
<condition>
<and>
The problem I have found is that the GlobalDecorator needs to apply
the "leftonly" style to the <container id="content-main-section"> only
if the leftbar does include content.
Any thought about this?
Thank you so much,
Bruno
Re: How to check if a decorator-section is empty
Posted by Bruno Busco <br...@gmail.com>.
Don't mind,
I finally found this solution:
public boolean eval(Map<String, Object> context) {
Map<String, Object> sectionsList =
UtilGenerics.toMap(context.get("sections"));
return
!sectionsList.containsKey(this.decoratorSectionExdr.expandString(context));
}
Thank you anyway.
-Bruno
2009/11/29 Bruno Busco <br...@gmail.com>:
> I have added a new ScreenCondition in the ModelScreenCondition.java as follows:
> public static class IfEmptyDecoratorSection extends ScreenCondition {
> protected FlexibleStringExpander decoratorSectionExdr;
>
> public IfEmptyDecoratorSection(ModelScreen modelScreen,
> Element condElement) {
> super (modelScreen, condElement);
> this.decoratorSectionExdr =
> FlexibleStringExpander.getInstance(condElement.getAttribute("decorator-section"));
> }
>
> @Override
> public boolean eval(Map<String, Object> context) {
> Debug.logWarning("if-empty-decorator-section TEST", module);
> return false;
> }
> }
>
> but I do not understand how to actually check for the decorator
> section being empty or not.
> Could somebody help me?
> Thank you,
> Bruno
>
> 2009/11/28 Bruno Busco <br...@gmail.com>:
>> Hi list,
>> could someone please tell me if there is any way to check in a screen
>> condition if a decorator section is empty?
>>
>> I would like to do something similar to this:
>>
>> <container style="contentarea">
>> <decorator-section-include name="pre-body"/>
>> <container id="column-container">
>> <section>
>> <condition>
>> <if-decorator-section-empty decorator-section="left-bar"/>
>> </condition>
>> <widgets>
>> <container id="content-main-section">
>> <decorator-section-include name="body"/>
>> </container>
>> </widgets>
>> <fail-widgets>
>> <container style="left">
>> <decorator-section-include name="left-bar"/>
>> </container>
>> <container id="content-main-section" style="leftonly">
>> <decorator-section-include name="body"/>
>> </container>
>> </fail-widgets>
>> </section>
>> </container>
>>
>> Basically this is used to have the leftbar filled using a new
>> decorator-section defined in the GlobalDecorator and not using any
>> more the leftbarScreenName and leftbarScreenLocation so that for
>> instance the CommonCatalogDecorator would change from
>>
>> <screen name="CommonCatalogDecorator">
>> <section>
>> <actions>
>> <set field="leftbarScreenName" value="leftbar"/>
>> <set field="leftbarScreenLocation"
>> value="component://product/widget/catalog/CommonScreens.xml"/>
>> <set field="MainColumnStyle" value="leftonly"/>
>> </actions>
>> <widgets>
>> <decorator-screen name="main-decorator"
>> location="${parameters.mainDecoratorLocation}">
>> <decorator-section name="pre-body">
>> <section>
>> <!-- do check for CATALOG, _VIEW permission -->
>> <condition>
>> <and>
>> ..................
>> to
>>
>> <screen name="CommonCatalogDecorator">
>> <section>
>> <widgets>
>> <decorator-screen name="main-decorator"
>> location="${parameters.mainDecoratorLocation}">
>> <decorator-section name="left-bar">
>> <include-screen name="leftbar"/>
>> </decorator-section>
>> <decorator-section name="pre-body">
>> <section>
>> <!-- do check for CATALOG, _VIEW permission -->
>> <condition>
>> <and>
>>
>> The problem I have found is that the GlobalDecorator needs to apply
>> the "leftonly" style to the <container id="content-main-section"> only
>> if the leftbar does include content.
>>
>> Any thought about this?
>>
>> Thank you so much,
>> Bruno
>>
>
Re: How to check if a decorator-section is empty
Posted by Bruno Busco <br...@gmail.com>.
I have added a new ScreenCondition in the ModelScreenCondition.java as follows:
public static class IfEmptyDecoratorSection extends ScreenCondition {
protected FlexibleStringExpander decoratorSectionExdr;
public IfEmptyDecoratorSection(ModelScreen modelScreen,
Element condElement) {
super (modelScreen, condElement);
this.decoratorSectionExdr =
FlexibleStringExpander.getInstance(condElement.getAttribute("decorator-section"));
}
@Override
public boolean eval(Map<String, Object> context) {
Debug.logWarning("if-empty-decorator-section TEST", module);
return false;
}
}
but I do not understand how to actually check for the decorator
section being empty or not.
Could somebody help me?
Thank you,
Bruno
2009/11/28 Bruno Busco <br...@gmail.com>:
> Hi list,
> could someone please tell me if there is any way to check in a screen
> condition if a decorator section is empty?
>
> I would like to do something similar to this:
>
> <container style="contentarea">
> <decorator-section-include name="pre-body"/>
> <container id="column-container">
> <section>
> <condition>
> <if-decorator-section-empty decorator-section="left-bar"/>
> </condition>
> <widgets>
> <container id="content-main-section">
> <decorator-section-include name="body"/>
> </container>
> </widgets>
> <fail-widgets>
> <container style="left">
> <decorator-section-include name="left-bar"/>
> </container>
> <container id="content-main-section" style="leftonly">
> <decorator-section-include name="body"/>
> </container>
> </fail-widgets>
> </section>
> </container>
>
> Basically this is used to have the leftbar filled using a new
> decorator-section defined in the GlobalDecorator and not using any
> more the leftbarScreenName and leftbarScreenLocation so that for
> instance the CommonCatalogDecorator would change from
>
> <screen name="CommonCatalogDecorator">
> <section>
> <actions>
> <set field="leftbarScreenName" value="leftbar"/>
> <set field="leftbarScreenLocation"
> value="component://product/widget/catalog/CommonScreens.xml"/>
> <set field="MainColumnStyle" value="leftonly"/>
> </actions>
> <widgets>
> <decorator-screen name="main-decorator"
> location="${parameters.mainDecoratorLocation}">
> <decorator-section name="pre-body">
> <section>
> <!-- do check for CATALOG, _VIEW permission -->
> <condition>
> <and>
> ..................
> to
>
> <screen name="CommonCatalogDecorator">
> <section>
> <widgets>
> <decorator-screen name="main-decorator"
> location="${parameters.mainDecoratorLocation}">
> <decorator-section name="left-bar">
> <include-screen name="leftbar"/>
> </decorator-section>
> <decorator-section name="pre-body">
> <section>
> <!-- do check for CATALOG, _VIEW permission -->
> <condition>
> <and>
>
> The problem I have found is that the GlobalDecorator needs to apply
> the "leftonly" style to the <container id="content-main-section"> only
> if the leftbar does include content.
>
> Any thought about this?
>
> Thank you so much,
> Bruno
>