0

'I have a package called foo.package. And I also have a content item called mydocument.py. As a standard structure, inside foo/package I have browser, content, profiles, etc. What I want to achieve is to create a customized add template for my content item which is mydocument. I have read the article from this link http://docs.plone.org/external/plone.app.dexterity/docs/advanced/custom-add-and-edit-forms.html

What I have done is that I created a file inside browser directory and named it as mydocumentaddform.py. Also, inside my browser directory I have templates directory.

The code inside mydocumentaddform.py:

from five import grok
from plone.directives import dexterity, form
from Products.CMFCore.utils import getToolByName
grok.templatedir('templates')

class mydocumentaddform(dexterity.AddForm):
    grok.name('foo.package.mydocument')
    form.wrap(False)

Inside browser/templates directory I created the template mydocumentaddform.pt. However, my customized mydocumentaddform template was not rendered as I add the mydocument content, since inside the template I added js script to detect whether the customized add template override the default add template. As I view my instance, there is a UserWarning that there is an unassociated template configuration which points to my add template: ~... /foo/package/browser/templates/mydocumentaddform.pt

Is there anyone who have encountered the same problem? Or is there any other way to do this? Thanks.

*Yes I forgot to include the quotes here on grok.name.

Update: I found a temporary solution, inside the class ViewPageTemplateFile. Here's the updated code:

from five import grok
from plone.directives import dexterity, form
from Products.CMFCore.utils import getToolByName
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
grok.templatedir('templates')

class mydocumentaddform(dexterity.AddForm):
    grok.name('foo.package.mydocument')
    template = ViewPageTemplateFile('templates/mydocumentaddform.pt')
    form.wrap(False)

The customized add template was read, however, still my instance always says that the template that I used is still unassociated. As I also observed, when I replace the base class into dexterity.DisplayForm, the instance error is gone. With this temporary solution, I am not sure of any possible effect in the future due to this persistent error.

user1225163
  • 127
  • 1
  • 1
  • 9

1 Answers1

0

I see some issues in your code: you're missing the quotes on the name:

grok.name('foo.package.mydocument')

you need to define the context:

grok.context(IMyDocument)

did you declare an add-on layer? then you need:

grok.layer(IMyLayer)

you can find a working example in collective.nitf.

hvelarde
  • 2,875
  • 14
  • 34
  • Yes, I have added the two lines that you suggest, I created a layer inside interfaces. But I still have this error on my instance, which says that UserWarning that there is an unassociated template configuration: ~... /foo/package/browser/templates/mydocumentaddform.pt – user1225163 Jun 06 '14 at 16:30