无限分类只要读一次数据库(附代码)
好久没来了,昨天看到一位朋友的帖子说无限分类很简单,看完后多说了点,事后也觉得不太应该,
大家爱学,我就把我们一个商业程序中的无限分类拿出来,可能有不尽意的地方,同时也希望村民能给意见或建议
下面是无限分类的数据表
图片附件: [数据表] 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中只要显示该数组就完全可以了。
/**
* 未名新闻专用函数
* @ 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 .= '┃';
}
else
{
$space .= ' ';
}
}
if ($cat_tree[$catrow['cat_level']] > 0)
{
$space .= '┣';
}
elseif ($cat_tree[$catrow['cat_level']] == 0 && $catrow['cat_parentid'] != 0)
{
$space .= '┗';
}
//$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)
- 最新评论