Hi Nicolas, Before putting any view on the proposal, I would like to thank you for nice proposal with very nice details. Also before making any view, I would like to confirm my understanding on the proposal with some questions.
- Here we would like to replace the existing theme setup which is database driven. Then how we are going to change the themes on the fly as we do currently. Are we going to use content model. Please help me here. - Are we going to replace the theme related properties files and/or db entries. - Also it seems to me the handlers we add in the controller xml file will be removed. Is it correct understanding? I'm asking these question to understand how we are going to change the themes when server is running. I'll go thru the current rendering and get back on this asap. One quick comment, please see if it make sense. But I'll surely get back with more details on overall topic. - As mentioned the extend is child element in the structure. Can we change it to 'extends' just to follow the practice we have in java, form-widget and service definitions also uses the implements. -- Rishi Solanki Sr Manager, Enterprise Software Development HotWax Systems Pvt. Ltd. Direct: +91-9893287847 http://www.hotwaxsystems.com On Sun, Jul 23, 2017 at 5:10 AM, Nicolas Malin <[email protected]> wrote: > Hello, > > With the common-theme and my idea to implement a specific model to explain > a theme, I would be sharing my recent think: > > This is an example of xml definition for the common-theme, I set a small > description to explain each block > > ################################## > > <theme name="common" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/ > widget-theme.xsd"> > <visual-themes><!--List of visual theme contains to this theme > components--> > <visual-theme id="COMMON"/> > </visual-themes> > <widget-properties><!--Transversal properties relative to ofbiz > widget component--> > <default-view-size value="20"/> > <autocompleter > default-view-size="10" > default-min-lenght="2" > default-delay="300" > display-return-field="true"/> > <lookup > position="topleft" > width="640" > height="500"/> > <layered-modal > width="800" > height="600"/> > </widget-properties> > > <theme-properties> <!--specific properties dedicate to this theme --> > <property name="jgrowl.position" value="center" > type="String"/><!--possible value: top-left, top-right, bottom-left, > bottom-right, center--> > <property name="jgrowl.width" value="800" type="Integer"/> > <property name="jgrowl.height" value="" type="Integer"/> > <property name="jgrowl.speed" value="100" type="Integer"/> > </theme-properties> > > <templates><!-- Freemarker template use by this theme to render widget > model--> > <template name="screen" type="html" content-type="UTF-8" > encoding="none" encoder="html" compress="false"> > <template-file widget="screen" location="component://common-t > heme/template/macro/HtmlScreenMacroLibrary.ftl"/> > <template-file widget="form" location="component://common-t > heme/template/macro/HtmlFormMacroLibrary.ftl"/> > <template-file widget="tree" location="component://common-t > heme/template/macro/HtmlTreeMacroLibrary.ftl"/> > <template-file widget="menu" location="component://common-t > heme/template/macro/HtmlMenuMacroLibrary.ftl"/> > </template> > <template name="screenxml" type="xml" content-type="UTF-8" > encoding="none" encoder="xml"> > <template-file widget="screen" location="component://common-t > heme/template/macro/XmlScreenMacroLibrary.ftl"/> > <template-file widget="form" location="component://common-t > heme/template/macro/XmlFormMacroLibrary.ftl"/> > <template-file widget="tree" location="component://common-t > heme/template/macro/XmlTreeMacroLibrary.ftl"/> > </template> > <template name="screenxls" type="xls" > content-type="application/vnd.ms-excel" encoding="none" encoder="html"> > <template-file widget="screen" location="component://common-t > heme/template/macro/XlsScreenMacroLibrary.ftl"/> > <template-file widget="form" location="component://common-t > heme/template/macro/XlsFormMacroLibrary.ftl"/> > <template-file widget="tree" location="component://common-t > heme/template/macro/XlsTreeMacroLibrary.ftl"/> > </template> > <template name="screenfop" type="xsl-fo" > content-type="application/pdf" encoding="none"> > <template-file widget="screen" location="component://common-t > heme/template/macro/FoScreenMacroLibrary.ftl"/> > <template-file widget="form" location="component://common-t > heme/template/macro/FoFormMacroLibrary.ftl"/> > <template-file widget="tree" location="component://common-t > heme/template/macro/FoTreeMacroLibrary.ftl"/> > </template> > <template name="screentext" type="text" content-type="UTF-8" > encoding="none"> > <template-file widget="screen" location="component://common-t > heme/template/macro/TextScreenMacroLibrary.ftl"/> > <template-file widget="form" location="component://common-t > heme/template/macro/TextFormMacroLibrary.ftl"/> > <template-file widget="tree" location="component://common-t > heme/template/macro/TextTreeMacroLibrary.ftl"/> > </template> > <template name="screencsv" type="csv" content-type="UTF-8" > encoding="none" encoder="xml"> > <template-file widget="screen" location="component://common-t > heme/template/macro/CsvScreenMacroLibrary.ftl"/> > <template-file widget="form" location="component://common-t > heme/template/macro/CsvFormMacroLibrary.ftl"/> > <template-file widget="tree" location="component://common-t > heme/template/macro/CsvTreeMacroLibrary.ftl"/> > </template> > </templates> > > <common-screens><!--list all common screen and decorator global to > each application that each theme can be surcharge or not and use the screen > present on common theme--> > <structural-decorator default-location="component:// > common-theme/widget/CommonScreens.xml"> > <decorator name="GlobalDecorator"/> > <decorator name="LookupDecorator"/> > <decorator name="SimpleDecorator"/> > </structural-decorator> > <embed-decorator default-location="component:// > common-theme/widget/CommonEmbedScreens.xml"> > <decorator name="FindScreenDecorator"/> > <decorator name="EditScreenDecorator"/> > <decorator name="ListAndEditScreenDecorator"/> > </embed-decorator> > <general-screen default-location="component:// > common-theme/widget/CommonDedicateScreens.xml"> > <screen name="geoChart"/> > <screen name="EventMessages"/> > <screen name="countries"/> > </general-screen> > </common-screens> > > </theme> > > ####################################### > > Now if I want create my specific theme with only some particularity on > html rendering et some decorator I just define this : > > ####################################### > > <theme name="mytheme" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/ > widget-theme.xsd"> > <visual-themes> > <visual-theme id="MYTHEME"/> > </visual-themes> > <extend location="component://common-theme/theme.xml"/> > <theme-properties> > <property name="jgrowl.position" value="top-left" type="String"/> > </theme-properties> > <templates> > <template name="screen" type="html" content-type="UTF-8" > encoding="none" encoder="html" compress="false"> > <template-file widget="form" location="component://mytheme/ > template/macro/HtmlFormMacroLibrary.ftl"/> > </template> > </templates> > <common-screens> > <structural-decorator> > <decorator name="SimpleDecorator" > location="component://mytheme/widget/MyDecoratorScreens.xml"/> > </structural-decorator> > <general-screen > > <screen name="EventMessages" location="component://mytheme/ > widget/MyTemplateScreens.xml"/> > </general-screen> > </common-screens> > </theme> > > ####################################### > > With the extend elemet, mytheme resolve all information from common-theme > and surchage only what is define on his xml definition file. > > I think with this type of structure we can have : > > * a base de define a screen API for homogenise the IHM > * permit to a theme to surcharge only what he want (template rendering, > widget properties, screen present on API) > * remove all theme resource information and load it direclty on the > decorator (this slim the decorator complexity, slim data to load and make > more easier to follow what implement a theme) > > If you have a few time to sharing your remark, It's the last big point to > continue and maybe load the common-theme on trunk :) > > Nicolas > > -- > logoNrd <https://nereide.fr/> > Nicolas Malin > The apache way <http://theapacheway.com/> : *Openness* Technical > decisions are made publicly > [email protected] > 8 rue des Déportés 37000 TOURS, 02 47 50 30 54 > > Apache OFBiz <http://ofbiz.apache.org/>|The Apache Way < > http://theapacheway.com/>|ofbiz-fr <http://www.ofbiz-fr.org/>|réseau LE < > http://www.libre-entreprise.org/> >
