Expression Engine 2中基于CodeIgniter风格的基于规则的URL路由?

时间:2011-10-07 15:39:30

标签: codeigniter url-routing expressionengine

所以我是EE开发的新手,但我在CI方面有相当丰富的经验。

我想设置一个像这样的网址结构:

/channel-name/*
/channel-name/*/videos
/channel-name/*/shows
/channel-name/*/awards

我现在能想到的唯一方法就是在模板中使用条件。有没有办法路由URL类似于CodeIgniter允许我这样做的方式?

如果我遗漏了一些明显的东西,请原谅我的无知!

感谢。

3 个答案:

答案 0 :(得分:3)

EE没有您在CI,Rails等中可能习惯的酷路由。相反,EE是为了处理模板中的大部分逻辑而构建的 - 这对新手来说是一个福音,并且可能会让更多人烦恼经验丰富的开发者在模板中,您通常会使用基于URL段的条件来完成路由目标。

在你的情况下,我可能会非常使用嵌入式标签。嵌入是在EE中完成大量工作的好方法,因为它们可以帮助您绕过EE与嵌套循环相关的一些奇怪的解析顺序问题。例如:

{exp:channel:entries channel="my_channel_name" url_title="{segment_2}" limit="1"}

  {if segment_3 == "awards"}
    {embed="channel/awards" entry_id="{entry_id}"
  {if:elseif segment_3 == "shows"}
    ...
  {if:else}
    {embed="/channel/basic_entry" entry_id="{entry_id}"}
  {/if}

{exp:channel:entries}

像Switchee这样的东西可以使这样的控制语句更好一些。 http://www.google.ca/search?gcx=c&sourceid=chrome&ie=UTF-8&q=switchee

你也可以使用Freebie http://devot-ee.com/add-ons/freebie(完全披露,我这样做)告诉EE不要解析URL的某些部分,这样你就可以更自由地玩它了。

答案 1 :(得分:1)

这是EE中路线的一个很好的解释。既然EE现在是CI2,那么路由的工作方式非常接近:

http://venodesigns.net/2011/05/07/when-expressionengine-defaults-are-not-enough/

答案 2 :(得分:1)

使用类别将是ExpressionEngine中最符合您需求的逻辑分类法,并为您提供所需的URL结构。

默认情况下,ExpressionEngine URL类别段如下所示:

/index.php/template_group/template_name/CategoryID

使用您的示例,您将使用以下类别创建Category Group

  • 显示

许多开发人员将其模板组命名为与频道名称匹配,这使understanding ExpressionEngine URLs符合逻辑。

开箱即用,您的网址段如下所示:

/index.php/channel-name/template-name/C1

我建议您设置一个Category URL Indicator,这样您就可以在您的网址中使用标识符(例如category)代替非语义类别ID。

类别URLS将类似于:

/index.php/channel-name/category/videos

通过removing index.php from ExpressionEngine URLs更进一步,您可以实现:

/channel-name/category/videos

正如您在ExpressionEngine中发现的那样,URL和模板的灵活性允许组织和显示数据的多种方式。

例如,您可以使用标记而不是类别来对数据进行分组,但是您需要使用第三方加载项,因为标记是不包括在ExpressionEngine的核心功能中。

Solspace Tag Module,DevDemon的Tagger和Jamie Rumbelow的Taggable都是三个合适的候选人。