Insert Grocery Crud into another crud in codeigniter - codeigniter

i want to insert grocery crud in to another crud table.can i do it? i have tried it but it shows two error called
"Undefined property: Boq_doc_controller::$project_list_model" and
"Fatal error: Call to a member function show_boq_id() on null in
C:\xampp\htdocs\rcj-constructions\back-end\application\controllers\boq_doc_controller.php on line 42".
simply there is top level crud and there is a view boq button instead of edit or delete button.once click the view boq button it should go to the grocery crud.i will add my code. any one can plz help me.
thank you.
my top level crud model
class Project_list_model extends CI_Model {
public function get_all_project(){
$this->db->select("project.project_name, project.id, client.firstname, client.lastname,staff.firstname, staff.lastname, project.location,project.category, project.start_date, project.end_date");
$this->db->from('project');
$this->db->join('client', 'project.client_id = client.client_id');
$this->db->join('staff', 'staff.id = project.staff_id');
$query = $this->db->get();
return $query->result();
}
}
my top level crud controller
public function index()
{
$data['project_list'] = $this->project_list_model->get_all_project();
$this->load->view('project_list_view', $data);
}
my top level crud view
<?php foreach ($project_list as $project){ ?>
<tr>
<td><?php echo $project->project_name; ?></td>
<td><?php echo $project->location; ?></td>
<td width="40" align="left" ><a href="<?php echo base_url();?>index.php/project_list/index" >view BOQ</a></td>
</tr>
<?php }?>
my grocery crud controller
function __construct()
{
parent::__construct();
//load the Grocery_CRUD library
$this->load->library('grocery_CRUD');
$this->load->model('Project_list_model');
}
public function boq_doc(){
$crud = new grocery_CRUD();
// set datatable theme
$crud->set_theme('datatables');
//set the table name
$crud->set_table('staff');
$crud->columns('item_no','description');
$id = $this->uri->segment(3);
$data['single_boq'] = $this->project_list_model->show_boq_id($id);
//view output
$output = $crud->render();
$this->_example_output($output);
}
// edit /view /delete plan
public function boq_doc1()
{
// load plan
$this->grocery_crud->set_table('boq');
$output = $this->grocery_crud->render();
$this->_example_output($output);
}
// _example_output
function _example_output($output = null)
{
//load edit /view /delete plan
$this->load->view('our_template.php',$output);
}
// /._example_output
}

Related

Codeigniter framework: How do we trace where the variables in a given 'view' php code snippet are coming from?

I am in a codeigniter project, examining a file in the views folder. The php is as follows:
As a complete beginner, trying to make sense of this, I am trying to change the value of 'username' below to the 'firstname' that is a different field in the database. Changing the field below, from username, to firstname, causes an error.
I notice there is a loop using the variable: $results as $result)
What I want to know -as a lay person - is how to trace back where these variables are being 'called'from and which files to look into in order to find out how to use the required field, in this case, firstname, which is also from the database.
I have looked into the controllers, but can find nothing resembling this and don't know where to start, as the developer hasn't necessarily labelled everything logically.
My question is: As someone coming into a codebase that they don't know, how do you go about tracing back the logic to find out where you need to look to change a variable and make a change.
Any help on this matter would be greatly appreciated.
<?php
$rank = 0;
foreach($results as $result){$rank++;
?>
<tr style="border: 1px solid #ebebeb;padding-bottom: 0px;background-color: #fff;">
<td ><?php echo $rank; ?></td>
<td ><?php echo $result->username; ?></td>
<td ><?php echo $result->marks; ?></td>
<td ><?php echo $result->percentage; ?></td>
<td ><?php echo $result->duration; ?></td>
<td ><?php echo $result->date_time; ?></td>
<td>
<?php /*<i class="glyph-icon tooltip-button demo-icon icon-edit" title="Edit" style="color:blue;" data-original-title=".icon-edit"></i>
*/?>
<a onclick="return confirm('Are you Sure to Delete this Result???');" href="<?php echo site_url('result/delete/'.$result->id); ?>"><i class="glyph-icon tooltip-button demo-icon icon-close" title="Delete" data-original-title=".icon-close" style="color:red;"></i></a>
</td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
</div>
</div>
<?php } ?>
The starting code on the page I mention is below: Again, notice $results. What is it? Where do I identify its origin and seek to find the fields that populate it?
<?php if(empty($results)) {?>
<div id="page-title">
<h2>No Results Found.</h2>
</br>
</div>
<?php } else { ?>
<div id="page-title">
<h2>All Results</h2>
<h3>Quiz : <?php echo $results[0]->quiz_name; ?></h3>
Delete All
</br>
</div>
What I have done so far:
I have found the controller that seems to be relating to it - pasted below:
load->model('results');
if(!$this->session->userdata('ID'))
{
$this->session->set_flashdata('noAccess', 'Sorry');
redirect(site_url());
}
}
public function index($id='')
{
$data['results'] = $this->results->get_resultByQuiz(-1);
$this->load->view('template/header.php');
$this->load->view('result/index.php',$data);
$this->load->view('template/footer.php');
}
public function view($id='')
{
$data['results'] = $this->results->get_resultByQuiz($id);
$this->load->view('template/header.php');
$this->load->view('result/index.php',$data);
$this->load->view('template/footer.php');
}
public function delAll($id = '')
{
$updated = $this->results->delAll($id);
if($updated)
{
$this->session->set_flashdata('resultDeleteSuccess','result');
}
else
{
$this->session->set_flashdata('resultDeleteFail','result');
}
redirect('quiz');
}
public function delete($id = '')
{
$updated = $this->results->delete_results($id);
if($updated)
{
$this->session->set_flashdata('deleteSuccess','result');
}
else
{
$this->session->set_flashdata('deleteSuccess','result');
}
redirect('result');
}
}
I have also found this related model.
<?php if(!defined('BASEPATH')) exit ("No direct script access allowed");
class Results extends CI_Model {
public function get_all_results()
{
$query = $this->db->get('quiz_takers');
return $query->result();
}
public function get_resultByQuiz($ID)
{
$query = $this->db->query("select (select quiz_name from quizes where id = qt.quiz_id) as quiz_name, qt.* from quiz_takers qt where qt.quiz_id = '$ID' order by qt.percentage desc ");
return $query->result();
$this->db->where('quiz_id',$ID);
$query = $this->db->get('quiz_takers');
return $query->result();
}
public function delAll($ID = '')
{
$this->db->where('quiz_id',$ID);
return $this->db->delete('quiz_takers',$data);
}
public function delete_results($ID = '')
{
$this->db->where('id',$ID);
return $this->db->delete('quiz_takers',$data);
}
}
I am still none the wiser in determining where to alter what is held in that $results variable, so that I can change the field from username to firstname.
I suspect it may have something to do with this:
return $query->result();
but where do I search for queries? In models/controllers - or somewhere else?
In codeigniter,
view is where you write the code to be seen on front-end.
model is where you write your DB queries.
controller is where you connect your view and model(front-end
with DB) ie it works as an intermediate. Also, the routes are
generated as your controller-name and then your function-name plus any additional parameter you provided to that function.
So, if your route(URL) is
your-website/controller_name/function_name/additional-parameter
you need to look at the function {function_name} in your controller {Controller_name}.
Sometimes you might see that the controller or the function is not present in the location as it should(from the URL) then you need to check if any route is provided for that particular URL which will be available at application->config->routes.php
Say if your URL is
www.site/xyz
$route['xyz'] = 'controller_name/function_name'; // route set in routes.php
You need to look for function {function_name} in your controller {Controller_name}.
You need not worry about the model or view as they're called and loaded in the controller itself.
Now, about $results,
it is the key provided to the array variable in the controller which acts as variable in the view. See example -
Controller
$data['xyz'] = 'some-value'; // or $whatever['xyz'];
$data['abc'] = 'any-value'; // ...
$this->load->view('some_folder/some_view', $data); // pass $data array or $whatever
View (located at view->some_folder->some_view.php)
echo $xyz; // output: some-value -- key {xyz} of $data becomes a variable
echo $abc; // output: any-value -- key {abc} of $data becomes a variable
For more details, you might wanna look here, here and here.
See if it helps you.

how to view individual field of the table in codeigniter

I have created following table in mysql
I want to retrieve one of the field i.e abstract or author or Title by using id dynamically in view field.
These are my model, controller and view code.
Model:This is my model
$this->db->select("*");
$this->db->limit(10);
$this->db->from("abcde");
$query = $this->db->query("SELECT * FROM abcde ORDER BY DocumentID ASC");
Controller: this is my controller here
$this->load->model("Sample_model");
$data["fetch_data"] = $this->Sample_model->fetch_data();
$data['view']='services_view';
$this->load->view('load_view', $data);
return $query;
View:This is my view page
<?php
if($fetch_data->num_rows() > 0)
{
foreach($fetch_data->result() as $row)
{
?>
<tr>
<td><?php echo $row->Abstract
</tr>
<?php
}
}
?>
</table>
The above view is displaying all the record of abstract.I want to use ID in view so that i can get specific abstract in one line.
for example display abstract where id=1 or display author where id 3.Important point is here that i want to use id in view of the codeigniter. I will be grateful to you for your help.
Hope this will help you :
You can use custom helper to get the desired result
Add a file in your helpers folder name custom_helper.php and autoload with autoload.php like this :
$autoload['helper'] = array('custom');
In your custom_helper.php add a function like this :
function get_abstract($id)
{
$ci = & get_instance();
$query = $ci->db->get_where('abcde',['id' => $id]);
return $query->row()->abstract;
}
in your view call this get_abstract function like this:
<?php
if($fetch_data->num_rows() > 0)
{
foreach($fetch_data->result() as $row)
{
?>
<tr>
<!-- get abstract by id like this -->
<td><?php echo get_abstract($row->id);?></td>
</tr>
<?php }
}?>
Update : your controller should be like this :
public function services()
{
$this->load->model("Sample_model");
$data["fetch_data"] = $this->Sample_model->fetch_data();
$data['view']='services_view';
$this->load->view('load_view', $data);
}
Your model fetch_data should be like this :
function fetch_data()
{
$this->db->order_by("DocumentID" ,"ASC");
$this->db->limit(1);
$query = $this->db->get('prlaps');
return $query;
}
Update for View with using row() instead of result():
<?php
if($fetch_data->num_rows() > 0)
{
$row = $fetch_data->row();
echo get_abstract($row->id);
}?>

Want to display db value in my page. The Add and view should in one page

public function unit_list()
{
//Redirect in case of session out
if (!$this->session->userdata ( 'user_id' )) {
redirect ( $this->config->base_url (), 'refresh' );
return false;
}
$this->load->model('Unit_model');
$arrWhere = array("vchr_unit_status"=>"A");
$data ["unit"]=$this->Unit_model->get_all($arrWhere);
$this->load->view('includes/header');
$this->load->view('includes/left_menu');
$this->load->view('unit/manage',$data);
$this->load->view('includes/footer');
}
This is my controller . The unit_list is the function i wrote to get all data from db and view that in my view page
class Unit_model extends CI_Model{
protected $strTableName = 'suc_unit';
function __construct(){
parent::__construct ();
$CI = &get_instance();
$this->db->from($this->strTableName);
}
/**
*
*/
function get_all($arrWhere)
{
$this->db->where($arrWhere);
$q1 = $this->db->get();
$result = $q1->result_array();
return $result;
}
This is my model
<table id="tblListOfUnits" class="table table-bordered table-striped">
<tr>
<th style="width: 10px">Sl No</th>
<th>Unit Name</th>
<th>Unit Symbol</th>
</tr>
<?php
if(!isset($unit)){
$count = 1;
foreach ($unit as $key => $units) {
?>
<tr id="tr_<?php echo $units->pk_int_unit_id; ?>">
<td id="tdUntSlNo_<?php echo isset($units) ? $units['int_no_decimal']: ' '; ?>><a href="javascript:unitEdit(<?php echo $unit->pk_int_unit_id; ?>)" ><?php echo $count; ?>.</a></td>
<td id="tdUntNme_<?php echo $units->pk_int_unit_id; ?>"><a href="javascript:unitEdit(<?php echo $unit->pk_int_unit_id; ?>)" ><?php echo $unit->vchr_unit_name; ?></a></td>
<td id="tdUntSymbl_<?php echo $units->pk_int_unit_id; ?>"><a href="javascript:unitEdit(<?php echo $unit->pk_int_unit_id; ?>)" ><?php echo $unit->vchr_unit_symbol; ?></a></td>
</tr>
<?php
$count ++;
}
}?>
</table>
This is my view page. please help me to view all the data in my view page. Im new to codeigniter so i dont know how to use get_all function to view the data in my page.
CodeIgniter allows you to pass the data to the view in a couple of ways. First, if you would simply use the second parameter of the view method, then your data would be available as $unit in the view.
In your code, it seems that you are doing that. That means that in your unit/manage.php view, the result of your query should be available as $unit.
A couple of things though. When you load a model, calls to that model are lowercased.
$this->unit_model->get_all( $arrWhere );
It may not matter, but that line should be:
$data["unit"] = $this->unit_model->get_all( $arrWhere );
I want to point out that in your model's method, you are assuming that you will always have a result, and that's not OK. You need to make sure there's a result before trying to return it. Also, you need to provide a table name to get():
function get_all( $arrWhere )
{
// Make sure $arrWhere is an array
if( ! is_array( $arrWhere ) )
return FALSE;
$this->db->where( $arrWhere );
// Make sure you set the table name!
$q1 = $this->db->get( $this->strTableName );
// Make sure there is a result set!
if( $q1->num_rows() > 0 )
return $q1->result_array();
return FALSE; // or NULL, or array(), or whatever you want.
}
Sure, you are trying to set the table in the constructor of the model, but that would only work for the first query to the database. That's not right, and you should avoid that because typically you don't create a model just for a single query.
function __construct()
{
parent::__construct();
// If you are in a CodeIgniter model, you don't need this line
// $CI = &get_instance();
// This is bad. Don't do this ever.
// $this->db->from($this->strTableName);
}
Now in your view you have a problem. $unit will ALWAYS be set, so when you do this:
if( ! isset( $unit ) ) ...
You will never enter that block of code. What you should be doing there is:
if( ! empty( $unit ) ) ...
In your foreach loop, this code will throw an error:
$units->pk_int_unit_id
It's because you are returning an array of arrays from your db call, so it should be:
$units['pk_int_unit_id']
You've got other instances where you're trying to use an object that is actually an array. Basically anywhere that you have $units-> it should be $units['...'].
If you wany to use an object instead of an array, then inside get_all() you should use:
return $q1->result();
Because result_array() is an array of arrays, but result() is an array of objects.
Anyways, hope this helps.

codeigniter grabbing array from database

I'm new to codeigniter and followed the guides but seem to be missing something. I have a simple database with customer records in it. My first goal in codeigniter is to simple list all my customers.
here is my controller:
public function index()
{
$this->load->model('HomeModel'); //loads the HomeModel model
$data = $this->HomeModel->function1(); //loads the function (function1) from the model
$this->load->view('index', $data);
}
Here is my model:
public function function1()
{
$query = $this->db->get('work_orders');
return $query->result();
}
here is my view:
<table class="table table-bordered table-striped table-highlight" id="invoice-details">
<thead>
<tr>
<th>Work Order ID</th>
<th>Status</th>
<th>Description</th>
</tr>
</thead>
<?php
foreach ($data->result() as $row);?>
<tr class="even gradeC">
<td><a href="/WorkOrders/viewWo/<?php echo $row['id']; ?>">
<?php echo $row['id']; ?></a></td>
<td><?php echo $row['status']; ?></td>
<td><?php echo Logic\System\Lib\Helper::trunc(htmlentities($row['description']), 8); ?></td>
</tr>
<?php endforeach; ?>
</table>
Change on model :
public function function1()
{
$query = $this->db->get('work_orders');
//return $query->result();
return $query->result_array();
}
Change on controller :
public function index()
{
$this->load->model('HomeModel');
//$data = $this->HomeModel->function1();
$data['result'] = $this->HomeModel->function1();
$this->load->view('index', $data);
}
Change on view :
//foreach ($data->result() as $row);
if(is_array($result)&&!empty($result))
foreach ($result as $row);
Data is passed from the controller to the view by way of an array or an object in the second parameter of the view loading function. Here is an example using an array:
$data = array(
'title' => 'My Title',
'heading' => 'My Heading',
'message' => 'My Message'
);
$this->load->view('blogview', $data);
Views : Codeigniter User Guide
And Since you are using array on your view like $row['id'], you got to use result_array on model to return result set array:
This function returns the query result as a pure array, or an empty array when no result is produced. Typically you'll use this in a foreach loop, like this:
$query = $this->db->query("YOUR QUERY");
foreach ($query->result_array() as $row)
{
echo $row['title'];
echo $row['name'];
echo $row['body'];
}
Generating Query Results : Codeigniter
You can use $this->db->join();
$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comments', 'comments.id = blogs.id');
$query = $this->db->get();
Produces:
SELECT * FROM blogs
JOIN comments ON comments.id = blogs.id
Go through active record class guide .
Active Record Class
In ur controller,u must pass the values as subarray of data array$data['result'].After which u can simply call it in view as $result .
Controller
$data['result'] = $this->HomeModel->function1();
And In view,
foreach ($result as $row){
<?php echo $row->id; ?>
..
}

Codeigniter Message: Undefined variable: infos

I am a newbie in CI. I used MY_Controller.php as main controller. I could open the ajax as the div#page loader. Now , My problem is although I load /about page, I get the database entries for the services model. How can i get the about table for the about controller ?
..
function render_page($view) {
if( ! $this->input->is_ajax_request() )
{
$this->load->view('templates/header', $this->data);
}
$this->load->view($view, $this->data);
if( ! $this->input->is_ajax_request() )
{
$this->load->view('templates/menu');
$this->load->view('templates/footer', $this->data);
}
}..
My services_model:
class Services_model extends CI_Model {
function getAll() {
$q = $this->db->get('services');
if($q->num_rows() > 0){
foreach ($q->result() as $row)
{
$data[] = $row;
}
return $data;
}
}
}
My home controller :
public function view($page = 'home')
{
$this->load->helper('text');
$this->data['records']= $this->services_model->getAll();
if ( ! file_exists('application/views/pages/'.$page.'.php'))
{
// Whoops, we don't have a page for that!
show_404();
}
$data['title'] = ucfirst($page); // Capitalize the first letter
$this->render_page('pages/'.$page,$data);
}
When I use them in the home view there is no problem I can see the services_table :
<ul class="blog-medium">
<?php foreach($records as $row): ?>
<li>
<div class="blog-medium-text">
<h1><?php echo $row->title; ?></h1>
<p class="blog-medium-excerpt"><?php echo $row->content; ?><br />
Devamını Okumak için →</p>
</div>
<?php endforeach ?>
I want to use the same way in about page.
About_model:
class About_model extends CI_Model {
function getAll() {
$q = $this->db->get('abouts');
if($q->num_rows() > 0){
foreach ($q->result() as $row)
{
$data[] = $row;
}
return $data;
}
}
}
About controller :
public function view($page = 'about')
{
$this->load->helper('text');
$this->data['records']= $this->about_model->getAll();
if ( ! file_exists('application/views/pages/'.$page.'.php'))
{
// Whoops, we don't have a page for that!
show_404();
}
$data['title'] = ucfirst($page); // Capitalize the first letter
$this->render_page('pages/'.$page,$data);
}
And this is my view file of about :
<div id="content">
<?php foreach($infos as $row): ?>
<h3 style="text-align: center;"> <?php echo $row->title; ?></h3>
<div class="hr"> </div>
<?php echo $row->content; ?>
<?php endforeach; ?>
I get the error telling me :
Severity: Notice
Message: Undefined variable: infos
Filename: pages/about.php
Line Number: 3
Why cant i get the abouts table?
You are calling a variable $infos in your foreach, but it is never passed in as a variable to your view.
Read the docs about Adding Dynamic Data to the View
You will either need to set $data['infos'] to something or, and I'm guessing this what you intended, use $records in your foreach
The above answers your specific, but after you provided the repo for your source, there are issues you are struggling with. I highly suggest you read through the entire documentation, staring with the Introduction: Getting Started, continuing to the Tutorials and then General Topics.
The reason you are having problems here, you have your routes.php setup to that everything is routed into the Home controller executing the view method. This method, while it accepts the page you want to see is always returning a fetch of the services model. Your other controllers are not getting executed at all. Based on your controller setup, if you would just remove the custom route, http://theurl/about would route to the About Controller. The default method to be loaded is index so if you change view to index, then it would be displayed by default.

Resources