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 + -
显示快捷键?