[Zope-CMF] Re: CMF base tag rant

Chris McDonough chrism at plope.com
Wed Mar 3 14:21:19 EST 2004


I think this might be related to Plone's browserDefault munging, FWIW.

On Wed, 2004-03-03 at 06:34, Michael Haubenwallner wrote:
> Alexander Limi wrote:
> 
> > OK, guys - minor rant upcoming. Sometimes pain needs to be shared, OK? :]
> > 
> > Yesterday I tried to implement something known as a "skip" link for  
> > accessibility reasons. The rationale behind this is that at the top of  
> > every page, there should be a "skip to content" link for blind people 
> > and  systems like mobile phones etc, so they don't have to read all the  
> > navigation and logo stuff before they get to the content.
> > 
> > The process is really simple:
> > 
> > - Add an <a name="someContent" /> tag right before the content
> > 
> > - Make sure there is a link at the top of your page pointing to  
> > currentpage.html#someContent.
> > 
> > Easy, right? Wrong.
> > 
> > I load the front page of my CMF/Plone site. Base tag looks like this 
> > when  rendered:
> > 
> > <base href="http://localhost:8080/Plone/index_html" />
> > 
> > Only problem is, my *real* URL is http://localhost:8080/Plone - without  
> > the index_html in there. Thus, I'm in for a world of pain.
> > 
> 
> quoting from
> [cvs] / plone / CMFPlone / skins / plone_scripts / renderBase.py
> (Revision 1.4)
> ---------------
> # returns correct base href
> if getattr(context.aq_explicit, 'isPrincipiaFolderish', 0):
>      return context.absolute_url()+'/'
> else:
>      return context.absolute_url()
> ---------------
> 
> this could only happen if your object at "/Plone" is not PrincipiaFolderish.
> 
> i checked your case with zope and cmf and respective folder types
> (using the renderBase script from plone-cvs).
> 
> reported base always was correct:
> 
> 1) Zope
> http://localhost:8080/test/index_html
> <base href="http://localhost:8080/test/" />
> http://localhost:8080/test/
> <base href="http://localhost:8080/test/" />
> 
> 2) CMF
> http://localhost:8080/cmf/test
> <base href="http://localhost:8080/cmf/test/" />
> http://localhost:8080/cmf/test/index_html
> <base href="http://localhost:8080/cmf/test/" />
> 
> so it looks like you are using another renderBase.py or you redirect to 
> index_html in some way...
> 
> 
> 
> > If I make a tag with a link href="#someContent", the page will reload,  
> > since it thinks that index_html#someContent is what I'm linking to.
> > 
> > Some tinkering later, I try to do the following:
> > 
> > tal:attributes="href string:${request/URL0}#someContent"
> > 
> > But guess what? This won't work either.
> > 
> > I investigate the options i have, noting that no variable seems to keep  
> > the actual URL that is *inside the fecking URL bar* in my browser.
> > 
> > I turn to Simon Eisenmann for help, he comes up with an idea of using a  
> > combination of SERVER_URL and PATH_TRANSLATED to construct the actual 
> > URL  we're at.
> > 
> > But guess what? This doesn't work in Virtual Hosting scenarioes. So we  
> > have to create an additional rule that gets rendered if you have a 
> > Virtual  Hosted system.
> > 
> > The rule ends up looking like this:
> > 
> > <a
> >  tal:define="url  
> > request/VIRTUAL_URL|string:${request/SERVER_URL}${request/PATH_TRANSLATED}"
> >  tal:attributes="href string:${url}#someContent"
> > 
> >> Skip to content</a>
> > 
> > 
> > Easy, right?
> > 
> > When it could have been (and is, in the rest of the world) as simple as  
> > this:
> > 
> > <a href="#someContent">Skip to content</a>
> > 
> > And people wonder if it's "hard to keep compatibility with the CMF". Heh.
> > 
> > Is this stuff scheduled for a cleanup in 1.5? Setting (and don't let me 
> > go  into *depending*) on the base tag being set to something that is not 
> > the  current URL is *evil*.
> > 
> 
> IMHO, bashing CMF is no way to go.




More information about the Zope-CMF mailing list