liferay 6.1中的友好URL

时间:2013-01-10 13:44:04

标签: java url-rewriting liferay-6 friendly-url

我刚刚将博客(默认)portlet的网址更改为“ http:// localhost:8080 / web / standorman / blogs / - / blogs / application-development-in-liferay

但我希望它是“ http:// localhost:8080 / web / standorman / blogs / application-development-in-liferay

任何人都可以建议我如何解决它?

3 个答案:

答案 0 :(得分:1)

首先,你不能摆脱/ - /没有真正入侵你不想做的Liferay(它会带来更多问题而不是好处)。所有你可以摆脱的是一个“博客”,以/web/standorman/-/blogs/application-development-in-liferay之类的网址结尾 - 这对我来说似乎足够接近。

以下是如何使用yannicuLar建议的https://github.com/DevJonny/Liferay-6-Friendlier-Friendly-URL-Mapper/来做到这一点。

他的建议对你不起作用,因为你正试图改变Liferay本身嵌入的开箱即用的Liferay portlet。要改变那些必须使用EXT插件的东西。所以这正是你应该做的。

步骤1 - 在Plugins SDK中创建一个EXT插件(通过在插件SDK“ext”子文件夹中运行create.bat或create.sh)。

第2步 - 进入/docroot/WEB-INF/ext-impl/src删除文件portal-ext.properties内部创建的ext插件文件夹,然后将此文件 - https://github.com/DevJonny/Liferay-6-Friendlier-Friendly-URL-Mapper/blob/master/docroot/WEB-INF/src/com/mysmallcornerstudios/friendlierurlmapping/portlet/FriendlierFriendlyURLMapper.java放入其中以使其位于路径

/docroot/WEB-INF/ext-impl/src/com/mysmallcornerstudios/friendlierurlmapping/portlet/FriendlierFriendlyURLMappe r.java

第3步 - 打开文件docroot/WEB-INF/ext-web/docroot/WEB-INF/liferay-portlet-ext.xml 填写这样的内容:

<?xml version="1.0"?>
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 6.1.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_6_1_0.dtd">

<liferay-portlet-app>

    <portlet>
        <portlet-name>33</portlet-name>
        <icon>/html/icons/blogs.png</icon>
        <struts-path>blogs</struts-path>
        <configuration-action-class>com.liferay.portlet.blogs.action.ConfigurationActionImpl</configuration-action-class>
        <indexer-class>com.liferay.portlet.blogs.util.BlogsIndexer</indexer-class>
        <open-search-class>com.liferay.portlet.blogs.util.BlogsOpenSearchImpl</open-search-class>
        <scheduler-entry>
            <scheduler-event-listener-class>com.liferay.portlet.blogs.messaging.CheckEntryMessageListener</scheduler-event-listener-class>
            <trigger>
                <simple>
                    <property-key>blogs.entry.check.interval</property-key>
                    <time-unit>minute</time-unit>
                </simple>
            </trigger>
        </scheduler-entry>
        <scheduler-entry>
            <scheduler-event-listener-class>com.liferay.portlet.blogs.messaging.LinkbackMessageListener</scheduler-event-listener-class>
            <trigger>
                <simple>
                    <property-key>blogs.linkback.job.interval</property-key>
                    <time-unit>minute</time-unit>
                </simple>
            </trigger>
        </scheduler-entry>
        <friendly-url-mapper-class>com.mysmallcornerstudios.friendlierurlmapping.portlet.FriendlierFriendlyURLMapper</friendly-url-mapper-class>
        <friendly-url-mapping>blogs</friendly-url-mapping>
        <friendly-url-routes>com/liferay/portlet/blogs/blogs-friendly-url-routes.xml</friendly-url-routes>
        <preferences-unique-per-layout>false</preferences-unique-per-layout>
        <preferences-owned-by-group>true</preferences-owned-by-group>
        <use-default-template>false</use-default-template>
        <scopeable>true</scopeable>
        <private-request-attributes>false</private-request-attributes>
        <private-session-attributes>false</private-session-attributes>
        <render-weight>50</render-weight>
        <header-portlet-css>/html/portlet/blogs/css/main.css</header-portlet-css>
        <css-class-wrapper>portlet-blogs</css-class-wrapper>
        <add-default-resource>true</add-default-resource>
    </portlet>
</liferay-portlet-app>

此内容适用于我的Liferay版本。对于您的版本,您可能需要执行此操作以生成类似的内容:

  • 在Liferay发行版中找到文件liferay-portlet.xml(应该在webapps / ROOT / WEB-INF中用于Tomcat捆绑的发行版,但可能在不同的位置用于其他遇险 - 只需搜索它)
  • 在该文件中找到包含<portlet>...</portlet>的{​​{1}}部分
  • <portlet-name>33</portlet-name>内的整个部分复制到EXT插件中的上述文件<liferay-portlet-app><!-- copied text goes here --></liferay-portlet-app>
  • 将行docroot/WEB-INF/ext-web/docroot/WEB-INF/liferay-portlet-ext.xml替换为<friendly-url-mapper-class>...</friendly-url-mapper-class>
  • 删除行

``

<friendly-url-mapper-class>com.mysmallcornerstudios.friendlierurlmapping.portlet.FriendlierFriendlyURLMapper</friendly-url-mapper-class>

第4步 - 部署你的ext插件(​​在它的文件夹中运行ant来构建它,在Plugins SDK中找到子文件夹“dist”,找到你的插件的.war文件 - 通过将它复制到Liferay中将该.war文件部署到Liferay中Liferay distrib中的“deploy”文件夹)并重新启动Liferay。

应该这样做。

答案 1 :(得分:0)

可能会添加自定义FriendlyURL Mapper类来禁用该“ - ”前缀。你试过this吗?

我真的很抱歉,我可以帮助提供一个有效的例子。我给了它一个很好的尝试,因为我对这个功能也很感兴趣,但我担心这至少对于liferay 6.1.0来说是不可能的。看起来友好的网址需要'/ - /'。我发现并提出的solution实际上是一个黑客攻击,我相信它可能会有一些限制,但是即使你设法实现它,你也无法确定它是否适用于所有liferay版本。

根据要求我发布了这里详述的步骤,虽然我不得不说这对我不起作用(Custom Mapper在创建friendlyUrl时抛出错误)

  1. 您应该已经使用至少一条路线并使用DefaultFriendlyURLMapper进行了友好映射。如果你在你的网址中看到'/ - /'字符,你知道它有效。记住这个网址,您需要稍后进行测试,因为您确定Friendly -url会为此路线启动
  2. 创建一个扩展DefaultFriendlyURLMapper

    的自定义MApper类
        public class DemoCustomFriendlyUrlMapper extends DefaultFriendlyURLMapper {
    
    @Override
    public boolean isCheckMappingWithPrefix() {
    
        return false;
    }
    
  3. 确保获得您的Class限定名称(在Eclipse中按住F2,同时将鼠标悬停在类名称上)

    1. 转到liferay-portlet.xml并替换

      <friendly-url-mapper-class>com.liferay.portal.kernel.portlet.DefaultFriendlyURLMapper</friendly-url-mapper-class>
      
    2. <friendly-url-mapper-class>com.liferay.samples.DemoCustomFriendlyUrlMapper</friendly-url-mapper-class>
      

      转到导航到友好路由的网址,看看会发生什么。

答案 2 :(得分:0)

在资源中创建url-mapping.xml文件。 在文件中添加以下条目:

                                / {value} -----尝试没有“/ view /”              你的资源名称              2              cacheLevelPage              

此外,您需要在liferay-portlet.xml中添加以下代码。 .....图标后     com.liferay.portal.kernel.portlet.DefaultFriendlyURLMapper     您的资源名称将映射您的网址     / urlMapping /你url-mapping.xml名称 ....

就我而言,我创建了一个资源,基本上是一个带有友好网址的新页面的超链接。

我希望这会有所帮助。祝你好运