设想,你希望首页上的文章能够按新旧程度为标准以不同的颜色显示。你可以通过自定义模板覆盖的方式(override)来实现这一需求。有关自定义模板覆盖的相关信息,可以参见Joomla文档中文翻译 - 如何通过模板覆盖的方式修改Joomla的系统输出 .

你需要进行覆盖源文件路径为:
(joomla根路径)/components/com_content/views/frontpage/tmpl/default_item.php

将上述文件复制并粘贴到之前新创建的模板文件夹中,最终文件路径为:
(自定义模板路径根路径)/html/com_content/frontpage/default_item.php

如果该文件已经存在于你的自定义模板中,则无需复制,直接进行下面的修改工作即可

原理是这样的,在现在的文件中(default_item.php),文章的创建日期是通过$this->item->created 来调用显示的。我们可以通过比较该日期与当前的日期时间,来判断这篇文章的新旧程度,进而为不同时间阶段中的文章添加不同的class,以通过CSS控制 样式。

为了使修改工作变的更容易些,我们另创建一个单独的文件来比较日期并添加class。创建如下文件:
(自定义模板路径根路径)/html/com_content/frontpage/myfrontpagehelper.php

代码为:

<?php
/**
* Gets class based on today's date and article date
* @param $date
* @return string containing CSS class name
*/

class MyFrontpageHelper {

function MyFrontPageHelper() {
parent::_constructor();
}

function getCSSClassFromDate($date) {
$dateClass = ''; // default to blank
// subtract create date from current date. both dates in seconds
$elapsedDays = (time() - strtotime($date)) / 86400; // 86400=number of seconds per day
if ($elapsedDays <= 7) $dateClass = 'dateCurrent';
if (($elapsedDays > 7) && ($elapsedDays <= 14)) $dateClass = 'dateLastWeek';
if ($elapsedDays > 14) $dateClass = "dateOld";

return $dateClass;
}
}
?>

这个新的类包含有构造器和一个方法。在这个方法中,如果文章创建日期距当前日期没有超过7天,我们将新的class设置 为"dateCurrent";如果时间差在7天至14天的范围里,则设置为"dateLastWeek";如果时间差超过14天,则设置 为"dateOld"。

现在我们可以在default_items.php文件中使用这个方法来为我们的首页文章增加样式。首先,我们需要关联之前另创建的新文件。在default_items.php文件头部,找到以"defined..."开头的那行代码,修改为:

defined('_JEXEC') or die('Restricted access'); require_once('myfrontpagehelper.php');

注意,我们使用了require_once声明。我们之所以使用require_once而非include,是因为include会多次执行-对应每篇文章执行一次。而require_once可以保证只调用该文件一次。

现在我们可以通过调用这个方法来为文章添加新的class了。将新的class添加到哪里?这取决于我们希望得到怎样的样式。例如,我们希望改变文 章标题部分的样式。在这种情况下,我们找到default_items.php的第11行代码(以rhuk_milkyway模板为例),将其修改为:

<?php if ($canEdit || $this->item->params->get('show_title') || $this->item->params->get('show_pdf_icon') 
|| $this->item->params->get('show_print_icon') || $this->item->params->get('show_email_icon')) : ?>
<table class="contentpaneopen <?php echo MyFrontpageHelper::getCSSClassFromDate($this->item->created); ?>">

我们将原来的Page Class Suffix替换为我们自己的新class.注意在"contentpaneopen"与新class之间需要空格,这很重要。

在我们进行测试之前,我们需要有发布于不同时间段的一些文章。所以我进入文章管理器(Article Manager)修改一些文章的创建日期,使他们分别处于7天内、7天至14天、以及14天以外的时间范围中。然后刷新首页,检查HTML代码以确认我们 设定的新class已正确添加;如果一切正常,代码看上去应该这样:

<table class="contentpaneopen dateCurrent"> <tr> <td class="contentheading" width="100%"> Joomla! Security Strike Team </td>

可以确定我们的新class"dateCurrent"已经被正确添加。

接下来我们只需要到CSS文件中进行样式设置。我将这行代码加入CSS文件:

.contentpaneopen.dateCurrent { background: #F0FFFF; } 
.contentpaneopen.dateLastWeek { background: #FFF8DC; }
.contentpaneopen.dateOld { background: #DCDCDC; }

注意我们在CSS选择器中同时使用了.contentpaneopen与我们的新class。现在首页应该是这样了:

首页

我们也可以将新的class添加到default_items.php的第53行,以设置整个文章的背景色:

<?php echo $this->item->event->beforeDisplayContent; ?> 
<table class="contentpaneopen <?php echo MyFrontpageHelper::getCSSClassFromDate($this->item->created); ?>">

现在的首页应该是这样了:

首页

添加新class的具体位置取决于你的模板以及你希望得到怎样的风格样式。


只有注册用户登录后才能发表评论。
网站导航:

posts - 139, comments - 0, trackbacks - 0, articles - 0

Copyright © PHP博客