问题 - 灵感 - 插件
自2011年以来,我有一个客户让我费了很多心神和汗水,但同时也极大地帮助我在Joomla的开发中,以至于我可以编写自己的插件!
问题
我们遇到的一个问题是需要在一个文章标题中写斜体字母(例如:3rd World Congress = 3rd World Congress)。这在Joomla中行不通,任何在标题中使用HTML标签的尝试都会被忽略或删除标签。
方案1 = 快速解决
第一个解决方案是发布文章时不显示标题,并将标题作为文章的第一行。这不是最优雅的解决方案,因为如果例如显示打印页面图标,它将出现在标题上方而不是下方,就像其他页面一样。另一个问题是,如果文章在站点的其他位置显示,例如在模块或文件中,标题仍然是不正确的,因为没有斜体字母。
方案2 = 覆盖
在2014年JoomlaDay德国的一次演讲中,大卫·贾丁(David Jardin)的一个代码让我有了一个解决问题的想法。
想法是这样的
在文章标题中使用一个特殊字符(通常不常用)来标记需要显示为斜体的文本部分。例如 "3||rd|| World Congress"。在覆盖中添加了一段代码,允许我分离标题的不同部分
在com_content/article/default.php的头部
$suptype = $this->escape($this->item->title);
// Creo una variable nueva para el título
if (strpos($suptype, "||") !==false) {
$parts = explode("||", $suptype, 3);
$suptype = $parts[0] . '' . $parts[1] . '' . $parts[2];
}
else {
$suptype = $suptype;
}
// Se separan las distintas partes del título usando mi marcador "||" y se vuelve a escribir el título pero con la etiqueta HTML correspondiente para letras voladas (<sup>)
然后我稍低一点替换了标题为我的新变量
<?php if ($params->get('show_title')) : ?>
<h2>
<?php if ($params->get('link_titles') && !empty($this->item->readmore_link)) : ?>
<a href="/<?php echo $this->item->readmore_link; ?>">
<?php echo $suptype; ?></a>
<?php else : ?>
<?php echo $suptype; ?>
<?php endif; ?>
</h2>
<?php endif; ?>
当时我还在使用Joomla 2.5,它还没有使用布局主题。这意味着我必须为文章、博客布局、文件等编写不同的覆盖代码。这不是理想的。
方案3 = 插件
到2014年底,我购买了Jisse Reitsma所著的《Programming Joomla! Plugins》一书。这是一本非常值得推荐的书籍,适合所有想开始编写Joomla!扩展插件的人。阅读了一些章节后,我产生了创建自己插件的念头,用于修改文章的标题。
通过尝试和失败来学习!
我编写内容插件的第一个尝试没有成功,Jisse Reitsma帮助我理解了原因。
在Joomla中,标题是通过一个函数展示的(escape($this->item->title); ?>),它会移除HTML标签。无论我如何通过插件更改文章内容,文章模板都会移除这些更改。
解决这个问题的一个方法是创建一个系统插件,该插件使用onAfterRender()事件来替换HTML的"body"中的直接标记。这样,该插件不仅可用于替换文章标题,还可用于类别、模块等。
经过多次尝试(并且得到了我丈夫的帮助),我最终创建了一个插件,允许在文章标题(或任何需要的地方)内添加CSS类。这样,不仅能够创建斜体标题(这是主要问题),还能够创建部分文字不同颜色或不同字体的标题等,这一切都取决于我们为CSS类赋予的定义。
使用示例
在标题字段中,我们使用"{{titlechange:mi-clase texto a formatear}}"作为标记,将需要以其他方式格式化的文本部分放在花括号中。
标题为{titlechange:title1 cursiva}和{titlechange:title2 subrayado},颜色为{titlechange:title3 rojo}
HTML中的结果如下
<h2 itemprop="name">标题为 <span class="title1">cursiva</span> 和 <span class="title2">subrayado</span>,颜色为 <span class="title3">rojo</span></h2>
在我们的CSS页面中创建相应的类
.title1 {
font-style: italic;
}
.title2 {
text-decoration: underline;
}
.title3 {
color: #cc0000;
}
这就是最终的结果
可能性和组合多种多样!
结论
你可以将问题视为一个无解的头痛,或者你可以被它激励,并尽可能地解决它。一个问题可能有不同的解决方案,重要的是尝试开发最好的解决方案,并继续用Joomla!的知识前进。
该插件可以从我的GitHub仓库下载:https://github.com/drmenzelit/Joomla-Plugin-Title-Change
在Joomla社区杂志上发表的一些文章代表了作者对特定主题的个人观点或经验,可能并不代表Joomla!项目的官方立场
通过接受,您将访问https://magazine.joomla.net.cn/之外的第三方提供的服务
评论