我正在为Liferay EE 6.0 SP1支持的网站构建一个Portlet,它将根据用户当前正在查看的内容建议相关或其他有趣的内容。
例如,假设用户位于包含显示Web内容第5条的Web内容显示portlet的页面上。我的portlet将包含指向用户可以查看Web内容文章6和7的页面的HTML链接(其中包含被确定为与Web内容5中的内容类似的内容。
问题来了,因为我不希望我的portlet显示Web内容文章6和7的HTML链接(假设这样的概念甚至有效),我希望我的portlet显示链接到页面上哪些项目显示(即指向包含配置为显示这些Web内容文章的Web内容显示portlet的页面的链接)。
有办法:
或者,如果有办法让所有portlet实例与特定页面相关联,那么这也可能导致解决方案。
答案 0 :(得分:0)
解决此问题的一种方法似乎是向Web内容文章的结构添加“链接到页面”控件。内容管理员可以使用它来创建Web内容文章和页面之间的多对一关系。
但是,此解决方案存在问题,因为在编辑Web内容时对选择的页面没有任何限制。
例如,内容管理员可能会创建名为“我们的历史记录”的Web内容文章,但将“产品”页面指定为该文章的“链接到页面”控件的值。当相关内容portlet呈现“我们的历史”文章时,它将创建指向“产品”页面的超链接,在这种情况下,该页面不会在任何地方显示“我们的历史”文章。
可以说,这可以被认为是一个功能,但也许有更好的方法来做到这一点。
答案 1 :(得分:0)
我担心这是Liferay上尚不存在的功能。至少在Liferay页面上,同一主题上有一个feature request。讨论的日期是2011年3月,所以很快就会有一些事情发生:)
答案 2 :(得分:0)
我们目前正在考虑的另一个解决方案是为门户创建一个自定义视图模式(即“VIEW”,“PRINT”等),称为“XML”。当门户网站检测到浏览器正在请求XML模式时(类似于how Sitecore detects which device to use),它会绕过主题,并且所有支持此XML模式的portlet都将以XML格式呈现其内容。
输出可能如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<portal>
<portlet id="..." title="..." ...>
<JournalArticle>
<uuid_>...</uuid_>
...
</JournalArticle>
...
</portlet>
</portal>
然后,定期进程将以XML模式对站点进行爬网并更新Lucene索引。
这种方法的一个明显问题是它要求我们在网站上使用的每个portlet都是自定义开发的。由于各种原因(有些人称之为过于雄心勃勃的创意部门;我称之为现有功能集非常不足),我们最终可能不得不走这条路。