article.php
来自「php 开发的内容管理系统」· PHP 代码 · 共 450 行 · 第 1/2 页
PHP
450 行
$limit = null;
$start = null;
$sql = "SELECT $select".
" FROM " . $this->table. " AS a".
//" LEFT JOIN (SELECT blog_id, cat_id FROM ".planet_DB_prefix("blogcat").") AS bc ON a.blog_id = bc.blog_id";
" LEFT JOIN ".planet_DB_prefix("blogcat")." AS bc ON a.blog_id = bc.blog_id";
if (isset($criteria) && is_subclass_of($criteria, "criteriaelement")) {
$sql .= " ".$criteria->renderWhere();
if ($criteria->getSort() != "") {
$sql .= " ORDER BY ".$criteria->getSort()." ".$criteria->getOrder();
$orderSet = true;
}
$limit = $criteria->getLimit();
$start = $criteria->getStart();
}
if(empty($orderSet)) $sql .= " ORDER BY ".$this->keyName." DESC";
$result = $this->db->query($sql, $limit, $start);
$ret = array();
while ($myrow = $this->db->fetchArray($result)) {
$object =& $this->create(false);
$object->assignVars($myrow);
if($asObject){
$ret[$myrow[$this->keyName]] = $object;
}else{
foreach($myrow as $key=>$val){
$ret[$myrow[$this->keyName]][$key] = ($object->vars[$key]["changed"])?$object->getVar($key):$val;
}
}
unset($object);
}
return $ret;
}
/**
* count articles matching a condition of a category (categories)
*
* @param object $criteria {@link CriteriaElement} to match
* @return int count of articles
*/
function getCountByCategory($criteria = null)
{
$sql = "SELECT COUNT(DISTINCT a.art_id) AS count".
" FROM " . $this->table. " AS a".
//" LEFT JOIN (SELECT blog_id, cat_id FROM ".planet_DB_prefix("blogcat").") AS bc ON a.blog_id = bc.blog_id";
" LEFT JOIN ".planet_DB_prefix("blogcat")." AS bc ON a.blog_id = bc.blog_id";
if (isset($criteria) && is_subclass_of($criteria, "criteriaelement")) {
$sql .= " ".$criteria->renderWhere();
}
if (!$result = $this->db->query($sql)) {
return false;
}
$myrow = $this->db->fetchArray($result);
return intval($myrow["count"]);
}
function getCountsByCategory($criteria = null)
{
$sql = "SELECT bc.cat_id, COUNT(*)".
" FROM " . $this->table. " AS a".
//" LEFT JOIN (SELECT blog_id, cat_id FROM ".planet_DB_prefix("blogcat").") AS bc ON a.blog_id = bc.blog_id";
" LEFT JOIN ".planet_DB_prefix("blogcat")." AS bc ON a.blog_id = bc.blog_id";
if (isset($criteria) && is_subclass_of($criteria, "criteriaelement")) {
$sql .= " ".$criteria->renderWhere();
}
$sql .=" GROUP BY bc.cat_id";
if (!$result = $this->db->query($sql)) {
return false;
}
$ret = array();
while (list($id, $count) = $this->db->fetchRow($result)) {
$ret[$id] = $count;
}
return $ret;
}
/**
* get a list of articles matching a condition of user bookmark
*
* @param object $criteria {@link CriteriaElement} to match
* @param array $tags variables to fetch
* @param bool $asObject flag indicating as object, otherwise as array
* @return array of articles {@link Barticle}
*/
function &getByBookmark($criteria = null, $tags = null, $asObject=true)
{
if(is_array($tags) && count($tags)>0) {
if(!in_array($this->keyName, $tags)) $tags[] = $this->keyName;
$select = implode(",", $tags);
}
else $select = "*";
$limit = null;
$start = null;
$sql = "SELECT $select".
" FROM " . $this->table. " AS a".
//" LEFT JOIN (SELECT blog_id, bm_uid FROM ".planet_DB_prefix("bookmark").") AS bm ON a.blog_id = bm.blog_id";
" LEFT JOIN ".planet_DB_prefix("bookmark")." AS bm ON a.blog_id = bm.blog_id";
if (isset($criteria) && is_subclass_of($criteria, "criteriaelement")) {
$sql .= " ".$criteria->renderWhere();
if ($criteria->getSort() != "") {
$sql .= " ORDER BY ".$criteria->getSort()." ".$criteria->getOrder();
$orderSet = true;
}
$limit = $criteria->getLimit();
$start = $criteria->getStart();
}
if(empty($orderSet)) $sql .= " ORDER BY ".$this->keyName." DESC";
$result = $this->db->query($sql, $limit, $start);
$ret = array();
while ($myrow = $this->db->fetchArray($result)) {
$object =& $this->create(false);
$object->assignVars($myrow);
if($asObject){
$ret[$myrow[$this->keyName]] = $object;
}else{
foreach($myrow as $key=>$val){
$ret[$myrow[$this->keyName]][$key] = ($object->vars[$key]["changed"])?$object->getVar($key):$val;
}
}
unset($object);
}
return $ret;
}
/**
* count blogs matching a condition of user bookmark
*
* @param object $criteria {@link CriteriaElement} to match
* @return int count of blogs
*/
function getCountByBookmark($criteria = null)
{
$sql = "SELECT COUNT(DISTINCT a.art_id) AS count".
" FROM " . $this->table. " AS a".
//" LEFT JOIN (SELECT blog_id, bm_uid FROM ".planet_DB_prefix("bookmark").") AS bm ON a.blog_id = bm.blog_id";
" LEFT JOIN ".planet_DB_prefix("bookmark")." AS bm ON a.blog_id = bm.blog_id";
if (isset($criteria) && is_subclass_of($criteria, "criteriaelement")) {
$sql .= " ".$criteria->renderWhere();
}
if (!$result = $this->db->query($sql)) {
return false;
}
$myrow = $this->db->fetchArray($result);
return intval($myrow["count"]);
}
/**
* Get the previous article and the next article of an article
*
* @param object $article reference to the article
* @param int $blog blog ID
* @return array
**/
// To be optimized
function &getSibling(&$article, $blog = 0)
{
$ret = array();
$crit_prev = new CriteriaCompo(new Criteria("art_id", $article->getVar("art_id"), "<"));
if($blog>0) {
$crit_prev->add(new Criteria("blog_id", $blog));
}
$crit_prev->setSort("art_id");
$crit_prev->setOrder("DESC");
$crit_prev->setLimit(1);
$art_prev = $this->getObjects($crit_prev);
if(count($art_prev)>0){
$ret["previous"] = array("id"=>$art_prev[0]->getVar("art_id"),"title"=>$art_prev[0]->getVar("art_title"));
unset($art_prev);
}
$crit_next = new CriteriaCompo(new Criteria("art_id", $article->getVar("art_id"), ">"));
if($blog>0) {
$crit_next->add(new Criteria("blog_id", $blog));
}
$crit_next->setSort("art_id");
$crit_next->setOrder("DESC");
$crit_next->setLimit(1);
$art_next = $this->getObjects($crit_next);
if(count($art_next)>0){
$ret["next"] = array("id"=>$art_next[0]->getVar("art_id"),"title"=>$art_next[0]->getVar("art_title"));
unset($art_next);
}
return $ret;
}
/**
* Update comment count of the article
*
* @param object $article {@link Article} reference to Article
* @param int $total total comment count
* @return bool true on success
*/
function updateComments(&$article, $total)
{
$article->setVar("art_comments", intval($total), true);
return $this->insert($article, true);
}
/**
* delete an article from the database
*
* {@link Text}
*
* @param object $article {@link Article} reference to Article
* @param bool $force flag to force the query execution despite security settings
* @return bool true on success
*/
function delete(&$article, $force = true)
{
$rate_handler =& xoops_getmodulehandler("rate", $GLOBALS["moddirname"]);
$rate_handler->deleteAll(new Criteria("art_id", $article->getVar("art_id")));
xoops_comment_delete($GLOBALS["xoopsModule"]->getVar("mid"), $article->getVar("art_id"));
xoops_notification_deletebyitem($GLOBALS["xoopsModule"]->getVar("mid"), "article", $article->getVar("art_id"));
parent::delete($article, $force);
$article = null;
unset($article);
return true;
}
}
'
);
?>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?