0

下面是另一位开发人员快速创建的 Joomla 1.5 扩展的一页,它最终像核心 Joomla 相关文章一样工作,但更加自定义。代码不是很漂亮,但它可以工作。它显示在当前查看的页面上标记有相同标签的最新 5 篇文章的标题和日期。唯一的问题是它显示了 2013 年和 2012 年的文章,因为只有几篇 2013 年的文章。所以最终它应该只显示当年的 5 个相关项目。因此,如果它是 2013 年(它是),并且 2013 年只有 4 篇文章,它应该只显示这 4 篇。

上线:for($y=2001; $y <= $intYear; $y++)我尝试将 2001 更改为 2013,但在前端没有更改任何内容。尝试更改为 2014 并没有改变任何东西。

我正在考虑的另一个选择是在线:$objDb->setQuery("SELECT sectionid, catid, title如果有办法说 WHERE created='$currentYear' 之类的东西。

再一次,代码不是很漂亮,想象性能不是很好,但正在寻找一个快速解决这个问题的方法,直到以后可以用更好的解决方案替换整个模块。任何帮助将不胜感激!

<?php
// Include the syndicate functions only once
//require_once (dirname(__FILE__).DS.'helper.php');
//
//$list = modRelatedItemsHelper::getList($params);
//
//if (!count($list)) {
//  return;
//}
//
//$showDate = $params->get('showDate', 0);
//
//require(JModuleHelper::getLayoutPath('mod_related_items'));


// no direct access

defined('_JEXEC') or die('Restricted access');

// Include the syndicate functions only once
include_once( dirname(__FILE__).DS.'helper.php' );

if( !defined('NL') )
 { define('NL', "\n"); }

$prmRptShowFilter=$params->get('rpt_show_filter');
$prmRptSection=$params->get('rpt_section');
$prmRptCategory=$params->get('rpt_category');
$prmRptDateFormat=$params->get('rpt_date_format');


$arrMonths=array();
$arrMonths[1]='January';
$arrMonths[2]='February';
$arrMonths[3]='March';
$arrMonths[4]='April';
$arrMonths[5]='May';
$arrMonths[6]='June';
$arrMonths[7]='July';
$arrMonths[8]='August';
$arrMonths[9]='September';
$arrMonths[10]='October';
$arrMonths[11]='November';
$arrMonths[12]='December';

$arrYears=array();
$intYear=date(Y);
for($y=2001; $y <= $intYear; $y++)
 { $arrYears[]=$y; }

$varArticleId=JRequest::getVar('id');
$objDb=&JFactory::getDBO();

//--- Database Script ---//
$objDb->setQuery("SELECT sectionid, catid, title FROM #__content WHERE id='$varArticleId' LIMIT 1");
$rows=$objDb->loadObjectList();
$section_id=$rows[0]->sectionid;
$cat_id=$rows[0]->catid;
//--- Database Script ---//

$arrList=modGtSidebarCustomHelper::getList($params);

?>
<style type="text/css">
#idForm1 {
 float: right;
}
#idForm1 ul {
 margin: 0;
 padding: 0;
 list-style: none;
 clear: both;
}
#idForm1 li {
 float: left;
 margin: 0 1px 0 0;
 padding: 0;
}
#idGtReportDisplayB {
    text-align:left;
    margin:3px 5px;
}
#idGtReportDisplayB a:hover {
 text-decoration: underline;
    font-weight: normal;    
}

#idGtReportDisplayB span.zoom-link {
 display: none; 
}
#idGtReportDisplayB dl, 
#idGtReportDisplayB dl dt, 
#idGtReportDisplayB dl dd {
    padding: 0px 5px 0px 5px;
    margin: 0;
}

#idGtReportDisplayB dd {
    color: #680e0e;
}

#idGtReportDisplayB dl {
  width: 284px;
    padding-bottom: 15px;   
}

#idNoRelatedLatestNews {
 display: none;
}

</style>
<div id="idGtReportDisplayB">
<?php
 $strDisplay='';
 $prmRptDateFormat='n/j/Y';

 if( !empty($arrList) )
  {
   $strDisplay.='<h2>Recent News</h2>'. NL;

   $numSize=sizeof($arrList);
   for($x=0; ($x < $numSize) && ($x <= 5); $x++)
    {
     $tmpDtm=strtotime($arrList[$x]->created);

     $strDisplay.='<dl>'. NL;
     $strDisplay.=' <dt><a href="'. $arrList[$x]->route .'">'. $arrList[$x]->title .'</a></dt>'. NL;
     $strDisplay.=' <dd>'. date($prmRptDateFormat, $tmpDtm) .'</dd>'. NL;
     $strDisplay.='</dl>'. NL;
    }

   echo($strDisplay);
  }
 else
  {
#   include( dirname(__FILE__).DS.'..'.DS.'mod_latestnews'.DS.'mod_latestnews.php' );
?>
<style type="text/css">
#idNoRelatedLatestNews {
  display: block;
}
</style>
<?
  }
?>
    </ul>
</div>
4

2 回答 2

0

尝试类似的东西,

$current_year = date('Y');
$objDb->setQuery("SELECT sectionid, catid, title FROM #__content WHERE id='$varArticleId'  AND  YEAR(created_on) = $current_year ");

它只会加载当年的数据..

于 2013-07-31T07:24:58.230 回答
0

由于社区对此没有太多回应,因此我最终创建了一个 hack,暂时解决了这个问题。在其中我将文章年份添加为每个 dl 的类名,然后通过 css 隐藏了我不想要的旧年份。虽然并不理想,但它可以工作,并且希望无论如何都能尽快替换所有代码。

于 2013-08-03T18:41:49.793 回答