CODEFIGHT CMS

 

      Current Version of Codefight CMS Available for Download:

            « Version 1.2.0 »

            NOTE: The code available is same as the code used for this site at the time of release.

            Codefight CMS is based on Codeigniter PHP Framework which is very easy to learn.

            It would be nice to hear back some feedback. Also you can contribute with code and helping translating language files in your language.

            You can use this CMS in anyway you want. You can modify as you like and use commercially for free.

 

Select Language.[TESTING For Next Release.]

English | नेपाली | French | German | Korean

Multilevel menu library for codefight cms

2009-05-26 13:11:35

 

Codefight cms is built with the help of codeigniter cms. Last weekend i wrote a multi-level menu library. You can use it for codefight cms or wherever you want.

This may not be perfect but it works. If you have a better idea i would like to know. This is how it looks like.

<?php
//If BASEPATH is not defined, simply exit.
if (!defined('BASEPATH')) exit('No direct script access allowed');
/*
>menus_id | menus_active | menus_parent_id | menus_link
>menus_title | menu_type | menus_meta_title | menus_meta_keywords
>menus_meta_description | menus_sort

Parameters that can be passed in an array:
$parameters = array (
'ul_param' => 'class=“xyz“...',
'li_param' => '...',
'a_param' => '...',
)
multi level menu created for codefight cms by damodar bashyal
visit codefight.org
*/
class Menu {
var $CI = '';
var $menu = array();
var $counter = 0;
var $holder = array();
var $menu_type = 'pages';
var $ul_param = '';
var $li_param = '';
var $a_param = '';
var $rtn=FALSE;
var $menu_list = '';
var $echo_list = '';
var $last_id = 0;
var $is_last = FALSE;

function get($parameters=array('menu_type' => 'pages'), $rtn=FALSE)
{

if(!is_array($parameters)) $parameters = array($parameters);

foreach($parameters as $k=>$v)
{
$this->$k = $v;
}

//Do you want to get menu as array items
$this->rtn = $rtn;

//reset to empty. because found some issue.
$this->echo_list = '';

$this->CI =& get_instance();

$this->CI->db->where('menus_type', $this->menu_type);
$this->CI->db->where('menus_active',1);
$this->CI->db->order_by('menus_sort', 'asc');
$query = $this->CI->db->get('menus');

$rows = $query->result_array();

return $this->_prepare($rows);
}

function _prepare($data=array())
{
//if $data is no array, return false
if(!is_array($data)) return false;

$menu_array = array();

//Group Menu By Parent ID.
//Top Level Menu has always parent ID = 0
foreach($data as $v)
{
$this->menu[$v['menus_parent_id']][$v['menus_id']] = array(
'title'=>$v['menus_title'],
'url' => $v['menus_link'],
'id' => $v['menus_id']);
}

$this->menu[0][0]['id'] = 0;//last item::needed until fix found

$this->last_id = 0;
return $this->_list();
}

function _list($child=array(), $space=0)
{
//if $menu is no array or empty, return false
if(!is_array($this->menu) || empty($this->menu)) return FALSE;

//Top Level Menu has always parent ID = 0
if((isset($this->menu[0]) && is_array($this->menu[0])) || (is_array($child) && !empty($child)))
{
//increment counter
$this->counter++;

//set current menu data array to holder
$this->holder[$this->counter] = (is_array($child) && !empty($child))? 
$child : $this->menu[0];

//get|set params
$ul_param = $li_param = $a_param = '';
if(!empty($this->li_param)) $li_param = ' ' . $this->li_param;

if(!empty($this->a_param)) $a_param = ' ' . $this->a_param;

if($this->counter===1 && !empty($this->ul_param))
{
if(preg_match('/class=“.+“/',$this->ul_param))
$this->ul_param = preg_replace('/class=“(.+)“/','class=“$1 cfm_level'.$this->counter.'“', $this->ul_param);

$ul_param = ' ' . $this->ul_param;
}
else
{
$ul_param = ' class=“cfm_level'.$this->counter.'“';
}

$this->echo_list .= “\n“.str_repeat(' ',$space).“<ul$ul_param>“;

//parent menu list
foreach($this->holder[$this->counter] as $v)
{
if($v['id']>0)
{
//menu lists
$this->echo_list .= “\n“.str_repeat(' ',($space+3)).“<li$li_param>“;
$this->echo_list .= “\n“.str_repeat(' ',($space+6));

if(preg_match('|http(s)?:\/\/|',$v['url']))
$this->echo_list .= '<a' . $a_param . ' href=“' . $v['url'] . '“>' . $v['title'] . '</a>';
else
$this->echo_list .= anchor('page/' . $v['id'] . '/' . $v['url'], $v['title'], $a_param);

if($this->rtn)
{
//START:: return menu items as array
$this->menu_list[$v['id']] = array(
'id' => $v['id'],
'title' => str_repeat('-', $space) . $v['title'],
'url' => $v['url'],
);
//END::
}

if(isset($this->menu[$v['id']]))
{
$this->_list($this->menu[$v['id']], $space+6);
$reduce_space = false;
}
else
{
$reduce_space = true;
}

$this->echo_list .= “\n“.str_repeat(' ',($space+3)).“</li>“;
}
if($v['id']==0)$this->is_last = TRUE;//Check to see if it is last one
}

if($this->counter > 1)$this->counter--;//taking level counter back to previous one.

$this->echo_list .= “\n“.str_repeat(' ', $space).“</ul>“;

//just to make it look nice
if($reduce_space)
if($space >= 3) $space = $space-3;

if($this->is_last)
{
//if all menus listing completed, return or echo it
if($this->rtn)
{
//if return=true for array | this is used for admin menu manager
return $this->menu_list;
} else {
return $this->echo_list;
}
}
}
}
}
?>

Bookmark and Share
 

 





Javascript must be enabled to post comment!

 

 


TAG CLOUD:

Friends