表达式引擎2中基于CodeIgniter样式规则的URL路由?

表达式引擎2中基于CodeIgniter样式规则的URL路由?,codeigniter,url-routing,expressionengine,Codeigniter,Url Routing,Expressionengine,所以我对EE开发是新手,但我对CI有相当广泛的经验 我想设置如下URL结构: /channel-name/* /channel-name/*/videos /channel-name/*/shows /channel-name/*/awards /index.php/template_group/template_name/CategoryID /index.php/channel-name/template-name/C1 我现在唯一能想到的方法就是在模板中使用条件。有没有一种方法可以像

所以我对EE开发是新手,但我对CI有相当广泛的经验

我想设置如下URL结构:

/channel-name/*
/channel-name/*/videos
/channel-name/*/shows
/channel-name/*/awards
/index.php/template_group/template_name/CategoryID
/index.php/channel-name/template-name/C1
我现在唯一能想到的方法就是在模板中使用条件。有没有一种方法可以像CodeIgniter那样路由URL

再一次,如果我遗漏了一些显而易见的东西,请原谅我的无知


谢谢。

这里有一个关于EE中路由的很好的解释。由于EE现在是CI2,那么路由的工作方式也差不多:


下面是对EE中路由的一个很好的解释。由于EE现在是CI2,那么路由的工作方式也差不多:


使用类别将是ExpressionEngine中最符合逻辑的分类法,可以满足您的需要,并为您提供所需的URL结构

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

/channel-name/*
/channel-name/*/videos
/channel-name/*/shows
/channel-name/*/awards
/index.php/template_group/template_name/CategoryID
/index.php/channel-name/template-name/C1
使用您的示例,您将创建具有以下类别的:

  • 录像带
  • 显示
  • 奖励
许多开发人员将其模板组命名为与通道名称匹配的模板组,这使其具有逻辑性

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

/channel-name/*
/channel-name/*/videos
/channel-name/*/shows
/channel-name/*/awards
/index.php/template_group/template_name/CategoryID
/index.php/channel-name/template-name/C1
我建议设置一个,这样您就可以在URL中为您的类别使用标识符(例如,
类别
),而不是不带符号的类别ID

类别URL将类似于:

/index.php/channel-name/category/videos
再进一步,通过,您可以实现:

/channel-name/category/videos
正如您将在ExpressionEngine中看到的,URL和模板的灵活性允许以多种方式组织和显示数据

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


DevDemon's和Jamie Rumbollow's都是三个合适的候选者。

使用类别将是ExpressionEngine中最符合逻辑的分类法,可以满足您的需要,并为您提供所需的URL结构

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

/channel-name/*
/channel-name/*/videos
/channel-name/*/shows
/channel-name/*/awards
/index.php/template_group/template_name/CategoryID
/index.php/channel-name/template-name/C1
使用您的示例,您将创建具有以下类别的:

  • 录像带
  • 显示
  • 奖励
许多开发人员将其模板组命名为与通道名称匹配的模板组,这使其具有逻辑性

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

/channel-name/*
/channel-name/*/videos
/channel-name/*/shows
/channel-name/*/awards
/index.php/template_group/template_name/CategoryID
/index.php/channel-name/template-name/C1
我建议设置一个,这样您就可以在URL中为您的类别使用标识符(例如,
类别
),而不是不带符号的类别ID

类别URL将类似于:

/index.php/channel-name/category/videos
再进一步,通过,您可以实现:

/channel-name/category/videos
正如您将在ExpressionEngine中看到的,URL和模板的灵活性允许以多种方式组织和显示数据

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


DevDemon和Jamie Rumbollow都是三个合适的候选者。

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这样的东西可以使这样的控制语句更好一些


您也可以使用Freebie(完全公开,我做了这个)来告诉EE不要解析URL的某些部分,这让您可以更自由地使用它。

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这样的东西可以使这样的控制语句更好一些


您还可以使用Freebie(完全公开,我做了这个)告诉EE不要解析URL的某些部分,这样您就可以更自由地使用它。

对于条目名称为*的URL,这是否有效?比如说/频道名称/我的频道条目/奖项。我非常希望不编辑核心文件,这是@swatkins的答案所要求的,但我仍然不确定有什么办法可以解决这个问题。我可能没有完全理解你的答案。你会把`/channel name/my channel entry/awards`带到哪里?您希望通过此URL结构看到什么内容?频道名称是我的模板组的名称。我希望我会在该组中放置一个名为Awards的模板,并让它列出第二个URL段(我的频道条目)中指定条目的奖励。很抱歉混淆了我的术语。对于条目名称为*的URL,这适用吗?比如说/频道名称/我的频道条目/奖项。我非常希望不编辑核心文件,这是@swatkins的答案所要求的,但我仍然不确定有什么办法可以解决这个问题。我可能没有完全理解你的答案。你会把`/channel name/my channel entry/awards`带到哪里?你想看什么内容