Как изменить поведение ATLink?
На моем Plone 3.3.5 (и на ранее пользованных 2.x, 3.x) тип ATLink при обращении к нему из навигации генерирует страничку с бессмысленной надписью "Адрес ссылки" и далее указанный для экземпляра объекта ATLink URL... Как заставить экземпляр ATLink вести себя, при обращении, как ссылка - т.е. выполнять переход по указанному URL? Или же, как добавить в навигацию якорь с внешним URL?
Спасибо.
Пожалуй отвечу сам себе (т.к. ответа на такой вопрос в сети не нашеёл)... Ответ нашёл посмотрев как работает метод объекта ATLink. Для того чтобы выполнялся редирект (для анонима) нужно чтобы у анонима небыло прав редактирования контента для этого экземпляра объекта. Нужно чтобы в /portal_types/Link в свойстве "Available view methods" имелось значение (строка) link_redirect_view и чтобы свойство "Default view method" было установлено в link_redirect_view. Кроме этого в /portal_properties/site_properties должно быть свойство redirect_links (булево или строковое - без разницы) установленное в enabled.
Да, такой метод наверно лучше. Я делала проще (или наоборот сложнее
). Переопределяла класс для рендеринга шаблона портлета как-то так:
<plone:portletRenderer
portlet="plone.app.portlets.portlets.navigation.INavigationPortlet"
layer=".interfaces.IThemeSpecific"
class=".navigation.SmolnyNavRenderer"
/>
В этом классе определяла свои шаблоны для вывода дерева рекурсивно:
from plone.app.portlets.portlets.navigation import Renderer
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
class SmolnyNavRenderer(Renderer):
_template = ViewPageTemplateFile('templates/navigation.pt')
recurse = ViewPageTemplateFile('templates/navigation_recurse.pt')
А в navigation_recurse.pt просто проверяла какой тип, если ATLink, то href подставляется значение getRemoteUrl
<li tal:define="show_children node/show_children;
...
remote_url node/getRemoteUrl;
is_link python:node['item'].portal_type == 'Link';>
... <a tal:attributes="href python:is_link and remote_url or item_url;
title node/Description;
class string:$item_class${li_class}${li_extr_class}${li_folder_class};
target python:is_link and '_blank' or '_parent'">
...
</a>
</li>
Это, естественно только для меню подходит.
По такому пути я не пошёл (хотя это, действительно, первое, что приходит в голову) т.к. помню что на одном из моих старых сайтов, работавших на Plone2.x ссылки работали правильно, потом (возможно после очередного апгрэйда движка) поведение ссылок изменилось, а потом и сайт стал не нужен (возиться с ним я не стал). А теперь проблема появилась снова - и решение ее оказалось довольно простым - изменились свойства ссылки установленные по-умолчанию и исчезли из стандартных настроек сайта и ссылки те которые отвечают за поведение объекта-ссылки.

