【问题标题】:Use the Joomla Language override to create custom <title> tags使用 Joomla 语言覆盖创建自定义 <title> 标签
【发布时间】:2022-01-12 17:16:18
【问题描述】:

我有这段代码已经在我需要完成的页面上运行。 (整个 Joomla 3.9 站点是自定义代码、组件等的科学怪人。)

   $placeholder_country = JText::_('COM_ACME_PLACEHOLDER_COUNTRY_'.strtoupper(str_replace('-','_',$var['country'])));
    if($placeholder_country === 'COM_ACME_PLACEHOLDER_COUNTRY_'.strtoupper(str_replace('-','_',$var['country'])) || !$placeholder_country) $placeholder_country = '';

    $article->text = JString::str_ireplace("{%placeholder_country%}", $placeholder_country, $article->text);

我尝试添加以下内容,看看是否可以使用相同的方式设置标题。

     $placeholder_country = JText::_('titlenick_'.strtoupper(str_replace('-','_',$var['country'])));
    if($placeholder_country === 'titlenick_'.strtoupper(str_replace('-','_',$var['country'])) || !$placeholder_country) $placeholder_country = '';

    $document->setTitle = JString::str_ireplace("{%placeholder_country%}", $placeholder_country, $article->text);

意思是,我进入 Joomla 语言覆盖部分,添加语言常量,例如“TITLENICK_PERU”

在“文本”Id 中输入我想要的页面标题。例如“便宜的秘鲁假期”。

编辑:

尝试使用 Anibal 的以下答案来解决:

在给出上述见解后,取得了进展。

我已经确认这是可行的

  $placeholder_nicktitle = JText::_('titlenick_'.strtoupper(str_replace('-','_',$var['country'])));
if($placeholder_nicktitle === 'titlenick_'.strtoupper(str_replace('-','_',$var['country'])) || !$placeholder_nicktitle) $placeholder_nicktitle = '';

$article->text = JString::str_ireplace("{%placeholder_nicktitle%}", $placeholder_nicktitle, $article->text);

在 Joomla 文章中放置 {%placeholder_nicktitle%} 会导致覆盖触发并显示我在覆盖中键入的文本。

现在的问题是如何让它工作,以便我在覆盖“文本”字段中输入的任何文本最终都会成为页面标题?

我想这需要改变

$article->text = JString::str_ireplace("{%placeholder_nicktitle%}", $placeholder_nicktitle, $article->text);

这是一个很长的镜头,但我尝试用这个替换上面的行(它抛出了 500 错误)

$document =& JFactory::getDocument();
$document->setTitle("JString::str_ireplace(". 
{%placeholder_nicktitle%}", $placeholder_nicktitle, $article- 
 >text);");

旁注:现在页面的标题来自 Joomla 文章标题本身“{%country_name%} 廉价假期”就是我们在其中的内容。我相信自定义编码。我尝试在 Joomla 文章标题中添加 {%placeholder_nicktitle%},但由于某种原因不起作用

【问题讨论】:

  • 请将您的 Joomla 问题发布到 Joomla Stack Exchange(您已经是会员并且一年多没有提问)。
  • 刚刚把问题贴在那里,我想因为问题涉及 PHP 和自定义代码,所以我会在这里发布
  • 这个问题当然依赖于对 Joomla(及其核心类/方法)的一些背景知识。如果有人想回答这个问题,请发到joomla.stackexchange.com/q/31738/12352
  • 如果用户愿意,他们应该仍然可以在此处发布答案。
  • Stack Overflow 用户当然可以在这里发帖,但我正在努力发展 Stack Exchange 测试版社区。 SO 在一天内收到的问题比 JSE 在一年内收到的问题还多。 JSE 社区正经历着停滞不前的增长,因为它正在与成熟的 SO 和 Joomla 拥有的论坛争夺注意力。

标签: php joomla seo


【解决方案1】:

在您的代码中有几点需要注意。所以,这更像是一次代码审查,而不是一个问题的答案。

第一部分代码生成一个LABEL,然后第二部分使用Joomla语言系统生成翻译文本。

首先,我会确认 PHP 代码是否生成了预期的标签:COM_ACME_PLACEHOLDER_COUNTRY_PERUTITLENICK_PERU

然后,简单的部分,确认如果你写:JString::str_ireplace("{%placeholder_country%}", $placeholder_country, $article-&gt;text);,当标签正确生成时;它会按照您在“语言覆盖”部分中的定义进行替换。

如有疑问,Joomla 函数 JString::str_ireplace 只是 PHP 函数的包装,因此您可以在此处查看原始文档:https://www.php.net/str_ireplace

综上所述,问题似乎是由于这两个部分的复杂性增加造成的。如果你把它们分开,你可以分别解决每个部分。

【讨论】:

  • 非常感谢这一点,并且由于您的评论,我们能够非常接近解决这个问题。如果您不介意看一下,我已经编辑了问题。
  • 您编写的示例代码将标题设置为“JString...”。你可以简单地写$title = JString::str_ireplace("{%placeholder_nicktitle%}", $placeholder_nicktitle, $article-&gt;text); $document-&gt;setTitle($title);。第一步,生成标题。第二步,在文档中设置标题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 2011-02-08
  • 2016-04-08
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 2011-08-13
相关资源
最近更新 更多