Plone - 如何在事件订阅者中设置默认页面?

时间:2017-01-19 13:32:32

标签: plone dexterity plone-4.x

我有一个文件夹敏捷内容类型,我有一个事件订阅者。创建内容类型后,我创建一个Collection,它根据几个参数显示容器中的子节点。创建集合后,我尝试将容器的默认页面设置为集合。

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        GridLayout gridLayout = (GridLayout) findViewById(R.id.gridView);

        ImageView[][] imageViews = new ImageView[2][2];

        for (int i=0;i<2;i++){
            for (int j=0;j<2;j++){
                imageViews[i][j] = new ImageView(MainActivity.this);
                imageViews[i][j].setImageResource(R.mipmap.ic_launcher);
                gridLayout.addView(imageViews[i][j]);
            }
        }  
  }
}

configure.zcml中的订阅者

def myContainerAdded(my_container, event):
    #get container
    #set advanced query for collection
    #create collection with api.create
    my_container.setDefaultPage(new_collection.id)

不幸的是,默认页面未完全设置。它只显示容器页面,但收集是在&#39;显示&#39;落下。 如果我单击&#34;将内容项更改为默认视图&#34;并选择该集合,它会将默认页面更改为集合。

早些时候,我正在使用&#34; setuphandler&#34;设置文件夹结构(而不​​是添加事件),并且setDefaultPage正在工作。我是否忘记了一步,因为我正在尝试通过一个事件?

我正在使用plone.4.3。

编辑:我也尝试过:

<subscriber
  for="my.product.my_container.IMyContainer
       zope.lifecycleevent.interfaces.IObjectAddedEvent" 
  handler=".events.myContainerAdded" />

编辑: 我找到了有趣的东西。我暂时在活动订阅者中注释了与集合相关的代码。我手动将集合添加到容器对象,然后将容器的默认页面设置为集合。容器的默认页面是集合。

也许有些东西没有被编入索引?

1 个答案:

答案 0 :(得分:3)

事实上一切进展顺利,只是在创建基于敏捷的内容类型之后,人们会看到默认视图的网址,这意味着&#39; / view&#39;附加到项目的网址,该网址是默认视图方法的别名,此处解析为&#39; folder_listing&#39; -template。

为了快速解决这个问题,您可以在订阅者的方法中添加重定向到对象的网址,而不会在网址上附加任何视图名称:

event.REQUEST.RESPONSE.redirect(my_container.absolute_url())