Php 从搜索结果中的变量分析变量

Php 从搜索结果中的变量分析变量,php,parsing,expressionengine,Php,Parsing,Expressionengine,为了创建搜索结果,我有一个存储页面路径的通道字段(例如/products/bikes)。 每个条目都有自己的路径 因为存在不同的通道,所以每个通道都有其唯一命名的通道字段。 对于“产品”频道,它是:{products\u search\u path\u nl} 在结果页面{exp:search:search\u results}中,动态创建的字段如下所示:{channel\u short\u name}\u search\u path\u language}显示为products\u searc

为了创建搜索结果,我有一个存储页面路径的通道字段(例如/products/bikes)。 每个条目都有自己的路径

因为存在不同的通道,所以每个通道都有其唯一命名的通道字段。 对于“产品”频道,它是:
{products\u search\u path\u nl}

在结果页面
{exp:search:search\u results}
中,动态创建的字段如下所示:
{channel\u short\u name}\u search\u path\u language}
显示为
products\u search\u path\u nl

问题在于它没有被解析。在查看EE的解析顺序后,我尝试了:

  • 将其用作代码片段
  • 将其分配给PHP变量并稍后输出
  • 更改PHP解析阶段(输入/输出)
  • 使用模板嵌入它
    {embed=“search/uri\u embed”}
  • 使用模板和模板变量嵌入它
    {embed=“search/uri\u embed”passed\u var=“{channel\u short\u name}}
  • 在简单的条件语句中使用它
    {if“1”==“1”}

谢谢你的阅读!任何帮助都将被感激

这是因为
{channel\u short\u name}
与所有自定义字段同时解析,因为它们存在于同一个循环中。
{language}
解析的原因是(我假设)它是一个早期解析的全局变量,由多语言模块或通过配置设置动态设置

嵌入会起作用,但代价非常昂贵,因为您必须同时传递
{channel\u short\u name}
{entry\u id}
,然后为每个结果运行整个通道条目循环(例如,
{exp:channel:Entries channel=“{embed:channel\u short\u name}”entry\u id=“{embed:entry\u id}”limit 1“disable=”member\u data | pagination | categories”}{{embed:channel\u short\u name}{u search\u path{language}}{/exp:channel:entries}

处理来自多个频道和多语言的搜索结果的首选方法是使用多语言解决方案,动态更改站点路径(因此所有
{path=”“}
{permalink=“}
变量都返回当前语言的正确URL),然后使用控制面板中每个频道的搜索结果路径设置(在管理下)→ 渠道管理→ 渠道→ 编辑→ 路径设置)。这将允许您在搜索结果中使用
{auto\u Path}
和/或
{id\u auto\u Path}
变量

希望这能有所帮助?

多亏了我的建议,我使用了一个循环,因为这似乎不可能用合适的方式解决

    {if "{channel_short_name}" == "news"}
        {if "{news_search_path_{language}}" != ""}
            <h3><a href="{base_url}{news_search_path_{language}}{url_title}">{title} </a></h3>
            {excerpt}
        {/if}

    {if:elseif "{channel_short_name}" == "products"}    
        {if "{products_search_path_{language}}" != ""}
            <h3><a href="{base_url}{products_search_path_{language}}{url_title}">{title} </a> </h3>
            {excerpt}
        {/if}

     // ....... and so on
{如果“{channel\u short\u name}”==“news”}
{如果“{news\u search\u path{language}”!=”}
{摘录}
{/if}
{if:elseif“{channel\u short\u name}”==“products”}
{如果“{products\u search\u path{language}”!=”}
{摘录}
{/if}
//……等等

我认为使用嵌入将是您成功的最佳机会。您发布的嵌入代码具体会发生什么?您能看到嵌入模板中的变量吗?字段名返回为
{products\u search\u path\u nl}
,但不会被解析。感谢您花时间回复Derek!添加另一个
{exp:channel:entries}
确实会很贵,但它可能会工作。至于多语言部分,我不能使用路径变量,因为通道中的每个条目都有自己的唯一路径,它基于指定的类别和子类别。这也正在被翻译。