PHP.EE FOORUM   
Nimi:   Pass:   Mäleta mind! 
   Teemad | php.ee esilehele | registreeri | Märgi kõik teemad loetuks | #php.ee Skype vestlus | RSS
UUS TEEMA  OTSI  Lehekülgi: 1
2 puusüsteemi tehnoloogiat - millist valida?
Postitaja: Evely87 2004-11-26 13:59:46
Segadust on tekitanud kaks võimalikku menüütehnoloogiat. Nimelt ei oska hinnata kumb on parem ja millistes olukordades kasutada üht või teist. Või on see left ja right süsteemiga struktuur kasutatav igalpool?

1. tehnoloogia

id
pid
name

2. tehnoloogia
id
name
left
right

Jutt käib sellest http://forum.planet.ee/showthread.php?t=38041&highlight=

Millist siis eelistada ja millistes olukordades?

Ja millist eelistada menüü puhul mis on CMS-des kui veebi struktuuri ja menüü korral, kus on vahel vaja kategooriate järjestust muuta (üles/alla)

Ja kas selle tehnoloogia puhul on väga keeruline uue kategooria kuhugi vahele lisamine ja/või mõne vana kuskilt ära kaotamine? Ja kuidas käib selle puhul see järjestus ja selle muutmine (üles/alla)?

Küsimusi oli palju aga ma ei suuda otsustada millist kasutada kuna pole kogemust ei oska ka hinnata head/vead omadusi nende vahel.
RE: 2 puusüsteemi tehnoloogiat - millist valida?
Postitaja: MeiX 2004-11-26 17:50:04
TSITEERITUD:
1. tehnoloogia
id
pid
name
Millist siis eelistada ja millistes olukordades?


Ma valiks tehnoloogia 1. Kuigi ei tea sellest left-right tehnoloogiast suurt midagi, aga olen saanud kõik järjestuste jms probleemid lahendatud parent_id rekursiivset tehnoloogiat kasutades.
RE: 2 puusüsteemi tehnoloogiat - millist valida?
Postitaja: lamer 2004-11-26 21:14:01
mina olen arusaanud nii, et 1. tehnoloogia puhul on lisamine kiire, kuid väljavõtmine võib aeglasemaks muutuda. teise variandi puhul on vastupidi.
RE: 2 puusüsteemi tehnoloogiat - millist valida?
Postitaja: Evely87 2004-11-27 15:42:05
Kuidas käib selle nr. 2 tehnoloogia kategooria lisamine ja kustutamine?
RE: 2 puusüsteemi tehnoloogiat - millist valida?
Postitaja: shaklalala 2004-11-27 20:49:28
teise meetodi puhul tuleb lisamisel ja kustutamisel ümber arvutada kõik alaenvad elemendid. Võidad päringute kiiruses ja queryde lihtsuses , aega kaotad suurte struktuuride puhul struktuurimuudatuste tegemisel. Mysql mis ei võimalda subquerysi ja protsesse teeb selle realiseerimise natuke keerulisemaks, teiste andmebaasidega on natuke lihtsam :)
RE: 2 puusüsteemi tehnoloogiat - millist valida?
Postitaja: monte 2004-11-27 21:34:21
no kurat lubage naerda. menüüsüsteemi tehnoloogiaks nimetada.... .D

aga asjast ka. endal oli jrk väli juures või number

st.

id,pid,name,lang,number

kus siis number on järjekorranumber. tegelikult on KORRALIKULT nende järjekorranubrite manageerimine paras kepp eriti kustutamise juures tuleb päris mitu päringut teha.

1) paranda sama teema järjekorranumbrid
2) liiguta alamamteemad kustutatud teema asemele ühe taseme võrre ülespoole sama koha peale vahele
jne.

aga kindlasti tasub vaeva. alfabeetiline või ide põhine ORDER BY baasist jätab sind üsna ruttu hätta.
RE: 2 puusüsteemi tehnoloogiat - millist valida?
Postitaja: monte_ 2004-11-27 21:46:35
ise kasutan sellist klassi, on ta hea või halb ei oska öelda, esialgne sai devshedist võetud ja siis ajapikku on seda muditud


PHP kood:
 
<?
//require_once("mysql.class.php");
class Menu extends MySql{

    var 
$TBL_MENU;

    function 
Menu_set_vars($TBL_MENU)
    {
        
$this->TBL_MENU=$TBL_MENU;
    }
    

    function 
AddCat()
    {
        
$cat_number=$this->CatCount($_POST['cat_parent'], $_POST[cat_lang]) + 1;
        
$sql='
        INSERT INTO '
.$this->TBL_MENU.'
        (cat_id, cat_parent, cat_name, cat_number, cat_lang, cat_active, cat_module)
        VALUES (0, \''.$_POST['
cat_parent'].'\', \''.$_POST['cat_name'].'\',
        \''.$cat_number.'
\', \''.$_POST['cat_lang'].'\', \''.$_POST['cat_active'].'\',
        \''.$_POST['
cat_module'].'\')';
        
$this->db_query($sql);
        return 
mysql_insert_id();
    }
    
    function 
Activate_Cat($arr)
    {
        if(
is_array($arr))
        {
            foreach(
$arr AS $key => $value)
            {
                
$sql ='UPDATE '.$this->TBL_MENU.' SET cat_active=\''.$value.'\'
                WHERE cat_id=\''.$key.'
\'';
                
$this->db_query($sql);
            }
        }
    }
    
    
    function 
GetSubcats($cat_parent=0$cat_lang=0$ignore=FALSE)
    {
        
$and=(!$ignore)? '''AND cat_active=\'1\'';
        
$sql='
        SELECT *FROM '
.$this->TBL_MENU.'
        WHERE cat_parent=\''.$cat_parent.'
\'
        AND cat_lang=\''.$cat_lang.'
\'
        '
.$and.'
        ORDER BY cat_number ASC
        '
;
        return 
$this->db_query($sql);

    }
    function 
GetLabel($cat_id)
    {
        
$sql='
        SELECT cat_name FROM '
.$this->TBL_MENU.'
        WHERE cat_id =\''.$cat_id.'
\'
        '
;
        return 
$this->db_single_row($sql);

    }
    
    function 
FirstCat($cat_lang=0)
    {
        
$sql='SELECT cat_id FROM '.$this->TBL_MENU.'
        WHERE cat_parent=\'
0\'
        AND cat_number=\'
1\'
        AND cat_lang=\''.$cat_lang.'
\'';
        return 
$this->db_single_row($sql);

    }

    function 
IsRoot($cat_id$cat_lang){
        if(
$this->GetParent($cat_id$cat_lang) == 0){
            return 
TRUE;
        }
        else{
            return 
FALSE;
        }
    }

    function 
GetParent($cat_id$cat_lang){
        
$sql='
        SELECT cat_parent
        FROM '
.$this->TBL_MENU.'
        WHERE cat_id =\''.$cat_id.'
\'
        AND cat_lang=\''.$cat_lang.'
\'
        '
;
        return 
$this->db_single_row($sql);
    }
    
    function 
GetNavbar($cat_id$cat_lang=0){
        
$i=0;
        
$return=array();
        while (!
$this->IsRoot($cat_id$cat_lang))
        {
            
$return[$i]=$this->GetParent($cat_id$cat_lang);
            
$cat_id=$return[$i];
            
$i++;
        }
        
$return=array_reverse($return);
        return 
$return;
    }


    function 
CatCount($cat_parent$cat_lang){
        
$sql='
        SELECT COUNT(cat_id)
        FROM '
.$this->TBL_MENU.'
        WHERE cat_parent=\''.$cat_parent.'
\'
        AND cat_lang=\''.$cat_lang.'
\'
        '
;
        return 
$this->db_single_row($sql);
    }
    
    function 
CatInfo($cat_id$cat_lang){
        
$sql='
        SELECT *
        FROM '
.$this->TBL_MENU.'
        WHERE cat_id = \''.$cat_id.'
\'
        AND cat_lang=\''.$cat_lang.'
\'
        '
;
        return 
$this->db_object($sql);
        
//print_r($this->db_object($sql));
    
}

    function 
CatMove($cat_id$ac$cat_lang){
        
$catinfo=$this->CatInfo($cat_id$cat_lang);
        if (
$ac==UP)
        {
            
$number_new=$catinfo->cat_number-1;
        }
        elseif (
$ac==DOWN)
        {
            
$number_new=$catinfo->cat_number+1;
        }
        
$this->db_query('
        UPDATE '
.$this->TBL_MENU.'
        SET cat_number=\''.$catinfo->cat_number.'
\'
        WHERE cat_number=\''.$number_new.'
\'
        AND cat_parent=\''.$catinfo->cat_parent.'
\'
        AND cat_lang=\''.$cat_lang.'
\'
        '
);
        
$this->db_query('
        UPDATE '
.$this->TBL_MENU.'
        SET cat_number=\''.$number_new.'
\'
        WHERE cat_id=\''.$cat_id.'
\'
        AND cat_parent=\''.$catinfo->cat_parent.'
\'
        AND cat_lang=\''.$cat_lang.'
\'
        '
);

    }
    
    function 
EditCat(){
        
$catinfo=$this->CatInfo($_POST['cat_id'], $_POST['cat_lang']);
        if(
$_POST[cat_parent]!=$catinfo->cat_parent)
        {
            
$cat_number=$this->CatCount($_POST['cat_parent'], $_POST['cat_lang']) + 1;
            
$sql='
            UPDATE '
.$this->TBL_MENU.'
            SET cat_number=cat_number-1
            WHERE cat_parent=\''.$catinfo->cat_parent.'
\'
            AND cat_number > '
.$catinfo->cat_number.'
            AND cat_lang=\''.$catinfo->cat_lang.'
\'
            '
;
            
$this->db_query($sql);
        }
        else
        {
            
$cat_number=$catinfo->cat_number;
        }
        
$sql='
        UPDATE '
.$this->TBL_MENU.'
        SET
        cat_name=\''.$_POST['
cat_name'].'\',
        cat_parent=\''.$_POST['
cat_parent'].'\',
        cat_number=\''.$cat_number.'
\',
        cat_active=\''.$_POST['
cat_active'].'\'
        WHERE cat_id=\''.$_POST['
cat_id'].'\'
        AND cat_lang=\''.$catinfo->cat_lang.'
\'
        '
;
        
$this->db_query($sql);

    }
    

    function 
IsSelected($cat_id$cat_lang$selected=0){
        
$navbar=$this->GetNavbar($selected$cat_lang);
        if (
$cat_id==$selected)
        {
            return 
TRUE;
        }
        elseif (
in_array($cat_id$navbar))
        {
            return 
TRUE;

        }
        else
        {
            return 
FALSE;
        }
    }


    function 
DeleteCat($cat_id$cat_lang)
    {
        
//uuuh this is ugly :p
        
        //ksututatva teema info
        
$info=$this->CatInfo($cat_id$cat_lang);
        
        
//kustutava teema alajotuste arv
        
$subs=mysql_num_rows($this->GetSubcats($cat_id$cat_lang));
        
        
$corr1=$info->cat_number -1;
        
$corr2=$subs -1;
        
        
        
        
//lisa kõigile kustutatava teema alateemadele järjekorranumbrite parandused
        
$this->db_query('
        UPDATE '
.$this->TBL_MENU.'
        SET cat_number=cat_number + '
.$corr1.'
        WHERE cat_parent=\''.$cat_id.'
\'
        AND cat_lang=\''.$cat_lang.'
\'
        '
);
        
        
//kustutava teema parenti järjekorranumbrite parandused
        
$this->db_query('
        UPDATE '
.$this->TBL_MENU.'
        SET cat_number=cat_number + '
.$corr2.'
        WHERE cat_number > '
.$info->cat_number.'
        AND cat_parent=\''.$info->cat_parent.'
\'
        AND cat_lang=\''.$cat_lang.'
\'
        '
);
        
        
//liiguta alateemad kustutatava teema parenti alla
        
$this->db_query('
        UPDATE '
.$this->TBL_MENU.'
        SET cat_parent=\''.$info->cat_parent.'
\'
        WHERE cat_parent=\''.$cat_id.'
\'
        AND cat_lang=\''.$cat_lang.'
\'
        '
);
        
        
//kustuta teema
        
$this->db_query('
        DELETE FROM '
.$this->TBL_MENU.'
        WHERE cat_id=\''.$cat_id.'
\'
        AND cat_lang=\''.$cat_lang.'
\'
        '
);
    }


    function 
build_select_menu($cat_id$pre$cat_lang)
    {
        
$subcats=$this->GetSubcats($cat_id$cat_lang);
        while(
$row=mysql_fetch_array($subcats))
        {
            
            
$level=sizeof($this->GetNavbar($row[cat_id], $cat_lang));
            if (
$pre==$row['cat_id']):$sel="selected"; endif;
            for(
$x=0$x $level*3$x++): $nbsp.='&nbsp;';endfor;
            print 
'<option value="'.$row[cat_id].'" '.$sel.'>'.$nbsp $row[cat_name].'</option>'."\n";
            unset(
$nbsp);
            unset(
$sel);
            
$this->build_select_menu($row[cat_id], $pre$cat_lang);
        }
        
    }

    function 
tree($cat_id=0$cat_lang$prefix='?cat_id='$ignore=FALSE)
    {
        global 
$menu;
        
$result $menu->GetSubcats($cat_id$cat_lang$ignore);
        
$max    mysql_num_rows($result);
        
$x        0;
        while(
$row=mysql_fetch_array($result))
        {
            if(
$x==0): print '<ul>'; endif;
            print 
'<li height="20"><a href="'.$prefix.$row[cat_id].'" class="link">'.$row[cat_name].'</a></li>'."\n";
            
$this->tree($row[cat_id], $cat_lang$prefix$ignore);
            if(
$x==$max-1): print '</ul>';endif;
            
$x++;


        }
    }
}
?>

RE: 2 puusüsteemi tehnoloogiat - millist valida?
Postitaja: ajupolitseinik 2004-11-27 22:38:33
TSITEERITUD:
no kurat lubage naerda. menüüsüsteemi tehnoloogiaks nimetada.... .D



Tehnoloogia on know-how ehk süsteem kuidas midagi tehakse või retsept.
Aga väga tihti inimesed peavad tehnoloogiaks mingeid asju, tegelikkuses võib öelda asjade kohta mitte tehnoloogia vaid kõrgtehnoloogilised asjad. Ja tehnoloogia on see kuidas neid asju tehakse.

Nii et nende menüüde puhul võib küll öelda tehnoloogia.

Leheküljed: 1

©2002-2013 Martin Rebane & PHP.ee kaasautorid
  0.0986518859863