ccop
Новичок
Nested sets: Id по пути - какой способ рациональный?
Вот на сайте (в хелпе) есть функция получения информации о странице зная только путь. Но она не работает если путь большой (имеется много подкатегорий) и вообще тормозит. Я вот попытлася написать свою функцию, вышло вот что:
Вопрос будет ли этот вариант рациональным? Есть ли другие способы кроме этого и того, что описан в хелпе?
Вот на сайте (в хелпе) есть функция получения информации о странице зная только путь. Но она не работает если путь большой (имеется много подкатегорий) и вообще тормозит. Я вот попытлася написать свою функцию, вышло вот что:
PHP:
//Get properties (id, url, template, title, permissions e.t.) of all categories in path
// path: array of path categories
// return_array: array that returns as link with informations of categories
function getPathInfo($path, &$return_array, $root_id=LEFT_ID_ROOT_CATEGORY, $use_prev_cat=USE_PREVIOUS_CAT){
$return_array=array();//array returns as link
//Make up query to DB
$select = "r.cat_left,t.*";
$table = DB_TREE." as r, ".DB_CAT_INFO." as t";
$where = "r.cat_id=t.cat_id AND (";
$pcount=count($path);
for($i=0;$i<$pcount;$i++)
$where .= "t.cat_url='".mysql_real_escape_string($path[$i])."' OR ";
$where .= " 0 )";
$query = "SELECT ". $select." FROM ".$table." WHERE ".$where;
$result = $this->db->query($query);
$correct_path = '';
//Leave needless records, form new path
$prev_id=$root_id;
$i=0;
while($row = $this->db->fetch_array($result)){
if( $row['cat_left'] == $prev_id+1 ){
$return_array[$i] = $row;
$correct_path .= $row['cat_url']."/";
$prev_id = $row['cat_left'];
$i++;
}
}
$rcount = count($return_array);
if( $rcount != 0 && $rcount != $pcount && $use_prev_cat == TRUE || $rcount == $pcount )
return TRUE;
else
return FALSE;
}