快捷搜索:   服务器  PHP  安全  linux 安全  IIS

无限分类只要读一次数据库(附代码)



好久没来了,昨天看到一位朋友的帖子说无限分类很简单,看完后多说了点,事后也觉得不太应该,
大家爱学,我就把我们一个商业程序中的无限分类拿出来,可能有不尽意的地方,同时也希望村民能给意见或建议
下面是无限分类的数据表

图片附件: [数据表] 0.gif (2007-11-16 08:39 PM, 15.79 K)



图片附件: 2.gif (2007-11-16 08:39 PM, 5.18 K)

这样显示会好看清一些

图片附件: 1.gif (2007-11-16 08:43 PM, 6.03 K)

上面这张图上显示的2次查询,取出显示分类也只是用了1次
下面我把在选择框里显示的代码COPY发出来
因为是全COPY的,我们在实际运用中还有缓存,所以函数一开始是读缓存,缓存不存在时才读数据库(这样的好处是在实际应用中显示一个无限分类可以不用读数据库)
函数输出是一个完全处理好了的数组,在smarty中只要显示该数组就完全可以了。


CODE: [Copy to clipboard] <?php
/**
     * 未名新闻专用函数
     * @ return array
     * (c) [url]www.wmstudio.cn[/url]
     */
    function get_cat_options()
     {
         global $news_categories;

        $cat_array = array();

        $cat_array['thread'] = array();

         if (empty($news_categories)) // 如果之前的程序中取出了类别,就不再读缓存
        {
             @include( C_PATH_CACHE . 'categories' . PHPEX ); // 调入缓存的类别数组$news_categories
        }

         if (empty($news_categories)) // 如果缓存不存在,读数据库取出
        {
             unset($sql);

            $sql = 'SELECT *'
                 . ' FROM ' . TABLE_ART_CATEGORIES
                 . ' ORDER BY cat_grouporder ASC, cat_group ASC, cat_order ASC';

             if ( FALSE !== $result = db_query( $sql ) )
             {
                 while ( $catrow = db_fetch_array($result) )
                 {
                    $cat_array['thread'][$catrow['cat_parentid']]++;

                    $cat_array['catrows'][] = $catrow;
                 }

                $cat_array_count = db_num_rows($result);
             }
             else
             {
                 return (boolean) FALSE;
             }
         }
         else
         {
             foreach ($news_categories as $catrow)
             {
                $cat_array['thread'][$catrow['cat_parentid']]++;

                $cat_array['catrows'][] = $catrow;
             }

            $cat_array_count = count($news_categories);
         }

        

        $p_catoptions = array();

         unset($catrow);

         for ($i = 0; $i < $cat_array_count; $i++)
         {
            $icon = '';

            $space = '';

            $catrow = '';

            $catrow = $cat_array['catrows'][$i];

            $cat_tree[$catrow['cat_level'] + 1] = $cat_array['thread'][$catrow['cat_id']];

            $cat_tree[$catrow['cat_level']]--;

             for ($ii = 0; $ii < $catrow['cat_level']; $ii++)
             {
                 if ($cat_tree[$ii] > 0)
                 {
                    $space .= '&#9475;';
                 }
                 else
                 {
                    $space .= '&nbsp;&nbsp;';
                 }
             }

             if ($cat_tree[$catrow['cat_level']] > 0)
             {
                $space .= '&#9507;';
             }
             elseif ($cat_tree[$catrow['cat_level']] == 0 && $catrow['cat_parentid'] != 0)
             {
                $space .= '&#9495;';
             }

            //$space = str_repeat('---', $catrow['cat_level']);
        
            $p_catoptions[$catrow['cat_id']] = $space . $catrow['cat_name'];

            // $t_assign['catname'][$catrow['cat_id']] = $space . $catrow['cat_name'];
        }

         return $p_catoptions;
     }
?>


顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论