• 16-02-2013, 20:32:12
    #1
    Wp mantığı kategori ve alt kategori nasıl yapabilirim acaba?

    Uzun yoldan çift while ile çözebiliyorum ama sanki daha kolay ve fonksiyonel yolları vardır gibi geliyor.

    Tasarım konusu sorun değil de siz kategori ve alt kategori olayını nasıl yapıyorsunuz?
  • 17-02-2013, 20:39:07
    #2
    http://www.sitepoint.com/hierarchical-data-database/

    burayı incelemeni öneririm adım adım anlatılmış
  • 17-02-2013, 21:02:58
    #3
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Benim kullandığım yapı aşağıda. Tek SQL sorgusuyla hiyerarşik sınırsız alt kategoriler oluşturabilirsiniz.

    <?php
    
    if (!($connection = mysql_connect('localhost', 'root', '')) || !mysql_select_db('cat', $connection))
    	exit('Failed to connect to database...');
    
    $tree = get_cat_tree();
    
    echo '<pre>';
    print_r($tree);
    echo '</pre>';
    
    function get_cat_tree()
    {
    	// Tüm kategorileri çek.
    	$result = mysql_query('
    		SELECT *
    		FROM cats');
    	$list = array();
    	while ($row = mysql_fetch_assoc($result))
    		$list[$row['id_cat']] = $row;
    	mysql_free_result($result);
    
    	// Her kategoriyi tek tek döngüye sokarak alt kategorileriyle eşleştir.
    	$tree = array();
    	foreach ($list as $id => $item)
    	{
    		if ($item['id_parent'] == 0)
    		{
    			$tree[$item['id_cat']] = $item;
    			unset($list[$id]);
    
    			find_sub_cats($list, $tree[$item['id_cat']]);
    		}
    	}
    
    	return $tree;
    }
    
    function find_sub_cats(&$list, &$selected)
    {
    	foreach ($list as $id => $item)
    	{
    		if ($item['id_parent'] == $selected['id_cat'])
    		{
    			$selected['sub_cats'][$item['id_cat']] = $item;
    			unset($list[$id]);
    			find_sub_cats($list, $selected['sub_cats'][$item['id_cat']]);
    		}
    	}
    }
    
    ?>
    Alıntı
    CREATE TABLE IF NOT EXISTS `cats` (
    `id_cat` mediumint(8) NOT NULL AUTO_INCREMENT,
    `cat_name` varchar(255) NOT NULL DEFAULT '',
    `id_parent` mediumint(8) NOT NULL DEFAULT '0',
    PRIMARY KEY (`id_cat`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;

    INSERT INTO `cats` (`id_cat`, `cat_name`, `id_parent`) VALUES
    (1, 'cat1', 0),
    (2, 'cat2', 0),
    (3, 'subcat1', 1),
    (4, 'subcat2', 1),
    (5, 'subcat3', 1),
    (6, 'subcat4', 2),
    (7, 'subcat5', 3),
    (8, 'subcat6', 7),
    (9, 'subcat7', 8);