mxmDynamicPage, Plone content type for dynamic lists
It does nothing that Topics and ZPT cannot do, but that approach is far to difficult for end users. I also find the current products that creates dynamic pages to complex and difficult for end users, so I have tried to find the sweet spot between power and ease of use.
It has been used in production for allmost a year, with good end-user satisfaction.
Structure of a Dynamic Page
The top of the page optionally consists of text content.
The bottom of the page consists of 0-5 dynamic lists.
This screenshot shows a fully populated page, with text, two columns and three columns.
Unfortunately it doesn't really do full justice to the possibilities. When you make your own styles, there is really no limit to the way it can look. The default styles are meant more as examples on how to make your own styles.
Editing the content
Editing the text content is just like editing a normal Plone Document. With all the usual fields. It also supports dynamic editors like Epoz. The main difference is the "edit lists" tab.
Defining lists
There can be up to 5 different lists on a single page. The content and the layout can be different for each list.
(This screenshot is a bit out of date. 2 more options in the latest version. Will be documented later)
Dynamic List
A dynamic list is like a simple search in the catalog. It includes the most common forms of searches that can be done. My hope is that it covers about 90% of all use cases.
The tricky point to understand about the searches, is that when no content types and no subjects are selected, then all content types and subjects are found.
This is the same behaviour as the advanced search form.
If you select only one content type, ie. Event, then only events are listed.
If you select "Event" and "Meeting", then only "events" who has the subject "meeting" are listed.
The search functions works like:
(type1 or type2 or type3) and (subject1 or subject2 or subject3)
A common mistake is to select all content types and all subjects, and then believe that all content is listed. But not all content has subjects/keywords selected in the properties/meta data tab. So in this case, contents without subjects will not be listed.
To list all contents it is safe enough to select all content types. But you should deselect all subjects!
A Dynamic Page also acts differently according to the users role.
When the user viewing the page is Anonymous, only published content is listed.
When a user is Authenticated, both Published and Visible content is listed.
Search Method
You can choose if the content in the dynamic list should come from the current folder, where the DynamicPage is added, and it's sub- folders. Which is the default.
In other words, all content in and below the path where the Dynamic Page is.
So if it is added to a member folder, only content from the member folder and below can be added to the dynamic page.
The content can also be collected from the entire site.
If you add a Dynamic Page to the root of the site, any content on the site can be added. No matter what search method you use.
Static List
If you have some dynamic lists on a page, but you think that some of your content is important enough that it should allways be visible. Ie. that it should not dissapear when newer items are added. Then you can use a static list.
You simply select some content from an alphabetically sorted list of content that is available to the page.
The list then consists of dynamic reference to the selected articles. So you don't have to worry about you dynamic page becomming out of sync. If you change the title or the description of some of the linked content, it will automatically be updated on the static list.
Beware: if you rename or move the items in a static list, it will loose the reference.
Layout of lists
There are 2 choices when it comes to the layout. "Style" and "position".
Style defines how the list looks on the page. Only a limited number of options are shipped as default, as it is my experience that almost no one style will be right for a specific site enyway.
If you want to define your own styles, you must customise the zpt
file DynamicPage_list_views in the mxmDynamicPage skin.
Position can be a little tricky to understand even though it only has two options.
- Under Previous, makes the list appear under the previous list. In other words it makes the list appear in a new row.
- Beside Previous, makes the list appear in a column beside the previous list.
Using a combination of these options gives practically unlimited layout options on single page.
Other products for dynamic pages
Compatibility
It runs under Plone 2.x and 2.1.x
License
Issues
contact me at maxm@mxm.dk
Download
You can get it from Downloads
Dynamic Page and Topics
using mxm dyn pages to do catalog search
reco
Limiting depth
-Alan
some modifications added
thanks a lot for this usefull product!
I have made some modifications, such as Dublin Core Metatags, sort by Id, ...
The modified sources can be seen/downloaded on http://howto.hopto.org/HowTos/ZopePlone/Products/MxmDynamicPage/
best regards,
RHase
How to add metadata properties
It would be nice if you one could add metadata properties (subject) to a dynamicpage
Static list can't use entire site
Replies to this comment
Kupu compatibility
Kupu not installed correctly: 'NoneType' object has no attribute 'getEditAccessor'
if you have an answer, please email me
thanks, daniel
danigras @at@ gmail .dot. com
Replies to this comment
Show only archived content does not work for anonymous users
On one hand, this makes sense since events that have expired are not visible to anonymous users. Therefore, if this is the case, then isn't the "Showed only archived content" option really not that useful?
Replies to this comment
Which Subject ?
Default page problem
When I want to select the default document to open, I have no document selectable.
I'm using Plone 2.1, Zope 2.7.7, Python 2.3.5 and mxmDynamicPage 2.4.0 under Windows 2000 server.
Oliv - oalba@bouygtel.fr
Replies to this comment
Missing formatTime definitions
Regards,
Nicolas
Replies to this comment
validator error
Traceback (innermost last):
Module ZPublisher.Publish, line 113, in publish
Module ZPublisher.mapply, line 88, in mapply
Module ZPublisher.Publish, line 40, in call_object
Module Products.CMFFormController.FSControllerPageTemplate, line 98, in __call__
Module Products.CMFFormController.BaseControllerPageTemplate, line 37, in _call
Module Products.CMFFormController.FormController, line 375, in validate
Module ZPublisher.mapply, line 88, in mapply
Module ZPublisher.Publish, line 40, in call_object
Module Products.CMFFormController.FSControllerValidator, line 59, in __call__
Module Products.CMFFormController.Script, line 141, in __call__
Module Products.CMFCore.FSPythonScript, line 108, in __call__
Module Shared.DC.Scripts.Bindings, line 311, in __call__
Module Shared.DC.Scripts.Bindings, line 348, in _bindAndExec
Module Products.CMFCore.FSPythonScript, line 142, in _exec
- <FSControllerValidator at /TEST/DynamicPage_editForm_validate used for /TEST/dynamicpage.2006-03-16.5438662345>
RuntimeError: mxmDynamicPage/skins/mxmDynamicPage/DynamicPage_editForm_validate.vpy has errors.
I do not configure any lists in that time. I just try to add the page and set its name/title. Anybody has a clue about what the problem could be?
Thank you!
How-to show images and full text in content?
Just wondering if ther's a way to show the news image and full text of the content...
Replies to this comment
Can it use Smart Folders for input ?
That way you can reuse existing Smart Folders throughout a website..
Otherwise , looks great !
LinguaPlone?
how dynamic??
Great product! You should have seen the smile on my face after I tried setting up my first dynamicpage. It's so easy! Stor takk! (I'm not sure if that's Danish but it's close, yes?) Anyhow, I have need to take my dynamicpage one step further and was wondering if you could tell me if it's possible and if so, point me to the right file to tweak in order to accomplish this:
I've created 4 side-by-side columns containing content including folders. If I have a folder in one of the columns, I was wondering if I would be able to invoke the "son of suckerfish" javascript/CSS code to enable a dynamic dropdown listing of THAT folder's contents in the event of an 'onmouseover'. Is dynamicpage that dynamic? :) I certainly hope so (and I have a feeling it can be done, but reckoned I should ask the master before banging my head against any walls)!
Cheers!
-Chris
Replies to this comment
Error when users click on Edit Lists
Traceback (innermost last):
Module ZPublisher.Publish, line 100, in publish
Module ZPublisher.mapply, line 88, in mapply
Module ZPublisher.Publish, line 40, in call_object
Module Shared.DC.Scripts.Bindings, line 306, in __call__
Module Shared.DC.Scripts.Bindings, line 343, in _bindAndExec
Module Products.CMFCore.FSPageTemplate, line 191, in _exec
Module Products.CMFCore.FSPageTemplate, line 124, in pt_render
Module Products.PageTemplates.PageTemplate, line 96, in pt_render
- <FSPageTemplate at /Plone/DynamicPage_editLists used for /Plone/internet_strategy/index_html>
Module TAL.TALInterpreter, line 189, in __call__
Module TAL.TALInterpreter, line 233, in interpret
Module TAL.TALInterpreter, line 663, in do_useMacro
Module TAL.TALInterpreter, line 233, in interpret
Module TAL.TALInterpreter, line 408, in do_optTag_tal
Module TAL.TALInterpreter, line 393, in do_optTag
Module TAL.TALInterpreter, line 388, in no_tag
Module TAL.TALInterpreter, line 233, in interpret
Module TAL.TALInterpreter, line 694, in do_defineSlot
Module TAL.TALInterpreter, line 233, in interpret
Module TAL.TALInterpreter, line 408, in do_optTag_tal
Module TAL.TALInterpreter, line 393, in do_optTag
Module TAL.TALInterpreter, line 388, in no_tag
Module TAL.TALInterpreter, line 233, in interpret
Module TAL.TALInterpreter, line 642, in do_defineMacro
Module TAL.TALInterpreter, line 233, in interpret
Module TAL.TALInterpreter, line 686, in do_defineSlot
Module TAL.TALInterpreter, line 233, in interpret
Module TAL.TALInterpreter, line 459, in do_setLocal_tal
Module Products.PageTemplates.TALES, line 220, in evaluate
- Line 140, Column 20
- Expression: standard:'here/static_list'
- Names:
{'container': <PloneSite instance at 03A14770>,
'context': <DynamicPage at /Plone/internet_strategy/index_html>,
'default': <Products.PageTemplates.TALES.Default instance at 0x014C2F30>,
'here': <DynamicPage at /Plone/internet_strategy/index_html>,
'loop': <SafeMapping instance at 232F1890>,
'modules': <Products.PageTemplates.ZRPythonExpr._SecureModuleImporter instance at 0x014BCBE8>,
'nothing': None,
'options': {'args': ()},
'repeat': <SafeMapping instance at 232F1890>,
'request': <HTTPRequest, URL=http://intranet.mmlive.com/internet_strategy/index_html/DynamicPage_editLists>,
'root': <Application instance at 03A14110>,
'template': <FSPageTemplate at /Plone/DynamicPage_editLists used for /Plone/internet_strategy/index_html>,
'traverse_subpath': [],
'user': cadmin}
Module Products.PageTemplates.Expressions, line 201, in __call__
Module Products.PageTemplates.Expressions, line 196, in _eval
Module Products.PageTemplates.Expressions, line 103, in render
Module Products.mxmDynamicPage.DynamicPage, line 512, in static_list
Module Products.mxmDynamicPage.DynamicPage, line 496, in list_of_all_content
Module Products.mxmDynamicPage.DynamicPage, line 427, in getDynamicList
Module ZODB.Connection, line 561, in setstate
Module ZODB.FileStorage, line 687, in load
Module ZODB.FileStorage, line 660, in _load
IOError: [Errno 13] Permission denied