Display Nested categories - El Forum - 07-10-2011
[eluser]shailendra[/eluser]
I want to display various project categories and no. of projects posted for each catgory. For example
Web & Programming(2)
-PHP(1)
-ASP(1)
Graphic Designing(2)
-Logo(2)
-Website Design(0)
I did this in php using following code. How do I do this in codeigniter?
Code: <?php
$category_details_model = new CategoryDetailsModel();
$category_details_array = array();
$category_details_array= $category_details_model->displayparentcategory(0);
for($i=0;$i<count($category_details_array);$i++) {
if(($category_details_model->noofactiveprojects($category_details_array[$i]->category_id,'public'))){
?>
<tr>
<td height="20"> - <a >category_id?>"><?php echo $category_details_array[$i]->category_name ?></a>(<?php echo $category_details_model->noofactiveprojects($category_details_array[$i]->category_id,'public') ?>)</a></td>
</tr>
<?php
}
}
?>
Function to list all parent category
Code: /* Function to list all parent category*/
public function displayparentcategory($parent_id){
$query=sprintf("select category_id,category_name from category where parent_id=%d and active='y' order by category_name asc;",
mysql_real_escape_string($parent_id));
//echo $query;
$category_array = array();
$result = mysql_query($query);
$num_rows = mysql_num_rows($result);
if($num_rows!=0) {
while ($row = mysql_fetch_assoc($result)) {
$category_details = new CategoryDetails;
$category_details->category_id = $row['category_id'];
$category_details->category_name = $row['category_name'];
//echo $category_details->category_name;
$category_details->parent_id = $row['parent_id'];
//echo $bid_details->proj_name;
$category_details->date_time = $row['date_time'];
//echo $bid_details->proj_name;
$category_array[]=$category_details;
}
return $category_array;
} else {
return NULL;
}
}
Display all projects in a parent category
Code: //Display all projects in a parent category
public function noofactiveprojects($category_id,$visibility){
$query1= sprintf("select category_id from category where parent_id=%d;",mysql_real_escape_string($category_id));
//echo $query1 ."\n";
$result1 = mysql_query($query1);
$total_num_proj=0;
while($row1 = mysql_fetch_array($result1)){
$category_id=$row1['category_id'];
if($visibility=="all"){
$query2= sprintf("select * from projects where category_id=%d and status='open';",
mysql_real_escape_string($category_id));
}
else{
$query2= sprintf("select * from projects where category_id=%d and status='open' and job_visibility='%s';",
mysql_real_escape_string($category_id),
mysql_real_escape_string($visibility));
}
//echo $query2;
$result2=mysql_query($query2);
$num_proj=1;
while($row2=mysql_fetch_array($result2)){
$projectposteddate=date('d-m-Y',strtotime($row2['date_time']));
$noofdays="+".$row2['job_display_days']." day";
$displayenddate=strtotime ( $noofdays,strtotime($projectposteddate));
//echo "displayenddate ".date('d-m-Y',$displayenddate);
$todaysdate=date("d-m-Y");
$difference=$displayenddate-strtotime($todaysdate);
$daysleft=round($difference / 86400);
if($daysleft>0){
$total_num_proj=$total_num_proj+$num_proj;
}
}
}
return $total_num_proj;
}
Display Nested categories - El Forum - 07-14-2011
[eluser]shailendra[/eluser]
Can't anyone help me on above problem?
Display Nested categories - El Forum - 07-14-2011
[eluser]toopay[/eluser]
First, you need to move your database abstraction into a separated class : read CI Model Spec to do that. Once you've done with that, create a Controller to handle the request, and when you need to interact with your database, call your model class. In CI, you do
Code: // This is actually instantiate a model class
$this->load->model('bar_model');
$foo = $this->bar_model->some_db_function();
instead what you done before
Code: // This probably still works, if you include the file 'bar_model.php' before this line, but it is not the way CI works.
$bar = new bar_model;
$foo = $bar->some_db_function();
Display Nested categories - El Forum - 07-15-2011
[eluser]shailendra[/eluser]
Basically, I want to know how to pass data from 3 different model functions to a view(via controller) and access it using foreach loop?
Model
Code: function list_parent_categories()
{
$this->db->select('category_id,category_name');
$this->db->order_by('category');
$this->db->where('parent_id',0);
$this->db->where('active','y');
$result_product = $this->db->get('category');
return $result_product->result_array();
}
function list_sub_categories($category_id)
{
$this->db->select('category_id,category_name');
$this->db->order_by('category');
$this->db->where('category_id',$category_id);
$this->db->where('active','y');
$result_product = $this->db->get('category');
return $result_product->result_array();
}
function no_of_projects($category_id)
{
$sql1="select count(proj_id) from projects where parent_id=".$category_id." and status='open'";
$result_total=$this->db->query($sql)->result();
if($result_total->num_rows()>0){
$row = $result_total->row();
$count = $row->total;
}
return $count;
}
I want to call above functions in a controller and pass the data to a single view so that I get this output
Web & Programming(2)
-PHP(1)
-ASP(1)
Graphic Designing(2)
-Logo(2)
-Website Design(0)
Please help?
Display Nested categories - El Forum - 07-15-2011
[eluser]toopay[/eluser]
In controller...
Code: public function index()
{
$this->load->model('model_name');
$data = array();
$categories = array();
$categories = $this->model_name->list_parent_categories();
$i = 0;
foreach($categories as $category)
{
$categories[$i]['total_project'] = $this->model_name->no_of_projects($category['category_id']);
$i++;
}
// Check the value
var_dump($categories);
// If above line works fine, just assign it into the view
// $data['categories'] = $categories;
// $this->load->view('some_view', $data);
}
Display Nested categories - El Forum - 07-17-2011
[eluser]shailendra[/eluser]
Based on the above code given I tried doing this
In Controller
Code: function index()
{
$this->load->model('category_model');
$build_array = array();
$proj_count = array();
$parent_categories = $this->category_model->list_parent_categories();
foreach($parent_categories as $parent_category)
{
//echo $parent_category->category_id;
$sub_categories = $this->category_model->list_sub_categories($parent_category->category_id);
foreach($sub_categories as $sub_category)
{
$proj_count[]=$this->category_model->no_of_projects($sub_category->category_id);
}
$build_array[] = array (
'parent_category' => $parent_categories,
'sub_category' => $sub_categories,
'count' => $proj_count
);
}
$category_list = $build_array;
//var_dump($category_list);
$data['categories'] = $category_list;
$this->load->view('category_view', $data);
}
In view
Code: <?php
foreach($categories as $category){
echo $category['parent_category']->category_name;
foreach ($category['sub_category'] as $lrow){
echo $lrow->category_name;
foreach($category['count'] as $krow){
echo $krow;
}
}
}
?>
But I get following error:
----------------------------
A PHP Error was encountered
Severity: Notice
Message: Trying to get property of non-object
Filename: views/category_view.php
Line Number: 3
Display Nested categories - El Forum - 07-17-2011
[eluser]toopay[/eluser]
If everythings goes smooth, in your view you just need to parse the "categories" variable as array (not object).
So you do...
Code: foreach($categories as $category)
{
echo $category['parent_category']['category_name'];
foreach ($category['sub_category'] as $lrow)
{
echo $lrow['category_name'];
foreach($category['count'] as $krow)
{
echo $krow;
}
}
}
But i think the example i gave you, more efficient instead what you try to do. By doing what i give you above, you should only loop one multidimensional array to get the same result.
Display Nested categories - El Forum - 07-18-2011
[eluser]shailendra[/eluser]
I get this error now with the above view code:
------------------------------
A PHP Error was encountered
Severity: Notice
Message: Undefined index: category_name
Filename: views/category_view.php
Line Number: 4
Display Nested categories - El Forum - 07-18-2011
[eluser]shailendra[/eluser]
I tried your previous code you gave on 15 July. I modified the controller code to include sub category
In controller
Code: function index()
{
$this->load->model('category_model');
$data = array();
$categories = array();
$categories = $this->category_model->list_parent_categories();
$i = 0;
foreach($categories as $sub_category)
{
$categories['sub_category'][$i] = $this->category_model->list_sub_categories($sub_category->category_id);
$j=0;
foreach($categories['sub_category'][$i] as $sub_category1)
{
$categories['proj_counts'][$j]=$this->category_model->no_of_projects($sub_category1->category_id);
$j++;
}
$i++;
}
// Check the value
var_dump($categories);
// If above line works fine, just assign it into the view
$data['categories'] = $categories;
$this->load->view('category_view', $data);
}
In View
Code: <?php
foreach($categories as $category){
echo $category->category_name;
foreach($category['sub_category'] as $lrow){
echo $lrow['category_name'];
}
}
?>
I get following error:
Fatal error: Cannot use object of type stdClass as array in C:\Program Files\Apache Group\Apache2\htdocs\codeigniter\application\views\category_view.php on line 4
Below is var_dump($categories) output
-------------------------------------
array(11) { [0]=> object(stdClass)#17 (2) { ["category_id"]=> string(2) "10" ["category_name"]=> string(13) "Admin Support" } [1]=> object(stdClass)#18 (2) { ["category_id"]=> string(2) "15" ["category_name"]=> string(8) "Coaching" } [2]=> object(stdClass)#19 (2) { ["category_id"]=> string(2) "12" ["category_name"]=> string(27) "Engineering & Manufacturing" } [3]=> object(stdClass)#20 (2) { ["category_id"]=> string(1) "2" ["category_name"]=> string(17) "Graphic Designing" } [4]=> object(stdClass)#21 (2) { ["category_id"]=> string(2) "13" ["category_name"]=> string(5) "Legal" } [5]=> object(stdClass)#22 (2) { ["category_id"]=> string(2) "14" ["category_name"]=> string(6) "Others" } [6]=> object(stdClass)#23 (2) { ["category_id"]=> string(2) "11" ["category_name"]=> string(17) "Sales & Marketing" } [7]=> object(stdClass)#24 (2) { ["category_id"]=> string(1) "1" ["category_name"]=> string(17) "Web & Programming" } [8]=> object(stdClass)#25 (2) { ["category_id"]=> string(1) "9" ["category_name"]=> string(22) "Writing & Translations" } ["sub_category"]=> array(9) { [0]=> array(0) { } [1]=> array(0) { } [2]=> array(1) { [0]=> object(stdClass)#26 (2) { ["category_id"]=> string(2) "16" ["category_name"]=> string(14) "Product Design" } } [3]=> array(3) { [0]=> object(stdClass)#16 (2) { ["category_id"]=> string(1) "6" ["category_name"]=> string(4) "Logo" } [1]=> object(stdClass)#28 (2) { ["category_id"]=> string(1) "7" ["category_name"]=> string(7) "Website" } [2]=> object(stdClass)#29 (2) { ["category_id"]=> string(1) "8" ["category_name"]=> string(10) "Stationery" } } [4]=> array(0) { } [5]=> array(0) { } [6]=> array(0) { } [7]=> array(3) { [0]=> object(stdClass)#27 (2) { ["category_id"]=> string(1) "3" ["category_name"]=> string(3) "PHP" } [1]=> object(stdClass)#31 (2) { ["category_id"]=> string(1) "4" ["category_name"]=> string(3) "JSP" } [2]=> object(stdClass)#32 (2) { ["category_id"]=> string(1) "5" ["category_name"]=> string(3) "ASP" } } [8]=> array(0) { } } ["proj_counts"]=> array(3) { [0]=> string(1) "2" [1]=> string(1) "1" [2]=> string(1) "3" } }
Display Nested categories - El Forum - 07-18-2011
[eluser]toopay[/eluser]
In your view, just convert the object into an array, before looping it...
Code: <?php
$categories = (array) $categories;
foreach($categories as $category)
{
// echo $category->category_name;
echo $category['category_name'];
foreach($category['sub_category'] as $lrow)
{
echo $lrow['category_name'];
}
}
?>
|