How to pass array/function to view page ? [OC] - php

Currently in my file
controller/common/home.php
$this->load->model('catalog/category');
$homepageProductTest = $this->model_catalog_category->homepageProductTest();
And when i echo $homepageProductTest , there is bunch of array.
What i wanted:
How do i pass the variable to my view file (home.tpl)
The error i always get (view/theme/xxx/template/common/home.tpl)
Undefined variable: homepageProductTest

if you want to use any variable in your view file from controller file then you have to pass your value in data variable like below,
like in your case, you want "homepageProductTest"
$data['homepageProductTest'] = $homepageProductTest; //write this code in your controller file
OR
$this->data['homepageProductTest'] = $homepageProductTest; //write this code in your controller
in .tpl file you can use this variable using PHP like,
<?php foreach($homepageProductTest as $producttest){ ?>
//your code here
<?php } ?>

Related

View included by $this->include does note recieve passed params

Is possible pass parameter to view when i use $this->include method in another view?
In example:
<?php
foreach ($destaques as $camping) {
$this->include('partial', ['camping' => $camping])
}
?>
But partial.php dont recieve $camping value.
When using $this->include you're making an echo of a view into an other one. So by default, the view you're loading will have acces to any data you gave to the parent view but not variables you declared into it.
A few options in your case :
Using the view method :
foreach ($destaques as $camping) {
echo view('partial', ['camping' => $camping]);
}
Moving your foreach loop in the partial view so you'll use $destaques into it.
<?php
// dont forget to echo
echo $this->include('partial')
?>
// or this way with short tags enabled
<?= $this->include('partial') ?>
And just embed your partial view in your previous foreach loop
foreach ($destaques as $camping) {
// whatever your partial view is
}
Hello I try using the parameter option. I test code and it s working. But note the include view layout method work like php default include function and it does not display until you echo it.
Here is my code which I use to test yours and it worked for me. Check it
$inc = '';
foreach ($destaques as $camping) {
$inc .= $this->include('partial', ['camping' => $camping])
}
echo $inc;
And this displayed and worked for me check it. if this is not what you were expecting, just call my attention

Smarty Undefined Index Variable

I am newbie to smarty and trying to output some results in my tpl file fetching from php. In my account.php file I have put Below code
<?php
include SMARTYLOADER;
$ad2 = $db->fetchRow("SELECT * FROM ip_ptc");
$smarty->assign("ad2", $ad2);
$smarty->display("account.tpl");
$db->close();
exit();
?>
and in my account.tpl file i have written below code to fetch the result
{$ad2.country}
but it is showing an undefined index variable ad2 what's wrong i am doing

load a url stored in mysql table using php code along with code igniter frame work, name,url are two columns ,diff user diff url

<?php
//fetched the url from data base and now in controller ,now how to load that url
$this->load->view('url');
redirect('contoller/viewpagename');
?>
1.url returned to controller from model want to load that url in controller
Try like
<?php
$data['url'] = $url;
$this->load->view(viewpagename,$data);
?>
url is variable not the string right..?and need not redirect it,when loading the view it will pass the data to the relavent view file,
And in your view file retrieve like
<?php echo "This is my URL ".$url;?>
EDIT
If you want to use stored url as view try to get the controller name and view file names like
$my_path = parse_url($url, PHP_URL_PATH);
$segments = explode('/', $my_path);
$this->load->view($segments[2],$segments[3]); // Or u can $url = "'".$segments[2]."/".$segments[3]."'"; and $this->load->view($url);
Assuming that 2nd and 3rd segments contains controller name and view file(or function) names respectively..you can change them as per you url
In your comment there is an error..
function pagination_student1() {
$segment = "student_details";
$url_now = "'".$segment."'";
$this->load->view($this->$url_now,$this->data);
}
replace
$this->load->view($this->$url_now,$this->data);
with
$this->load->view($url_now,$data);

PHP - include a php file and also send query parameters

I have to show a page from my php script based on certain conditions. I have an if condition and am doing an "include" if the condition is satisfied.
if(condition here){
include "myFile.php?id='$someVar'";
}
Now the problem is the server has a file "myFile.php" but I want to make a call to this file with an argument (id) and the value of "id" will change with each call.
Can someone please tell me how to achieve this?
Thanks.
Imagine the include as what it is: A copy & paste of the contents of the included PHP file which will then be interpreted. There is no scope change at all, so you can still access $someVar in the included file directly (even though you might consider a class based structure where you pass $someVar as a parameter or refer to a few global variables).
You could do something like this to achieve the effect you are after:
$_GET['id']=$somevar;
include('myFile.php');
However, it sounds like you are using this include like some kind of function call (you mention calling it repeatedly with different arguments).
In this case, why not turn it into a regular function, included once and called multiple times?
An include is just like a code insertion. You get in your included code the exact same variables you have in your base code. So you can do this in your main file :
<?
if ($condition == true)
{
$id = 12345;
include 'myFile.php';
}
?>
And in "myFile.php" :
<?
echo 'My id is : ' . $id . '!';
?>
This will output :
My id is 12345 !
If you are going to write this include manually in the PHP file - the answer of Daff is perfect.
Anyway, if you need to do what was the initial question, here is a small simple function to achieve that:
<?php
// Include php file from string with GET parameters
function include_get($phpinclude)
{
// find ? if available
$pos_incl = strpos($phpinclude, '?');
if ($pos_incl !== FALSE)
{
// divide the string in two part, before ? and after
// after ? - the query string
$qry_string = substr($phpinclude, $pos_incl+1);
// before ? - the real name of the file to be included
$phpinclude = substr($phpinclude, 0, $pos_incl);
// transform to array with & as divisor
$arr_qstr = explode('&',$qry_string);
// in $arr_qstr you should have a result like this:
// ('id=123', 'active=no', ...)
foreach ($arr_qstr as $param_value) {
// for each element in above array, split to variable name and its value
list($qstr_name, $qstr_value) = explode('=', $param_value);
// $qstr_name will hold the name of the variable we need - 'id', 'active', ...
// $qstr_value - the corresponding value
// $$qstr_name - this construction creates variable variable
// this means from variable $qstr_name = 'id', adding another $ sign in front you will receive variable $id
// the second iteration will give you variable $active and so on
$$qstr_name = $qstr_value;
}
}
// now it's time to include the real php file
// all necessary variables are already defined and will be in the same scope of included file
include($phpinclude);
}
?>
I'm using this variable variable construction very often.
The simplest way to do this is like this
index.php
<?php $active = 'home'; include 'second.php'; ?>
second.php
<?php echo $active; ?>
You can share variables since you are including 2 files by using "include"
In the file you include, wrap the html in a function.
<?php function($myVar) {?>
<div>
<?php echo $myVar; ?>
</div>
<?php } ?>
In the file where you want it to be included, include the file and then call the function with the parameters you want.
I know this has been a while, however, Iam wondering whether the best way to handle this would be to utilize the be session variable(s)
In your myFile.php you'd have
<?php
$MySomeVAR = $_SESSION['SomeVar'];
?>
And in the calling file
<?php
session_start();
$_SESSION['SomeVar'] = $SomeVAR;
include('myFile.php');
echo $MySomeVAR;
?>
Would this circumvent the "suggested" need to Functionize the whole process?
I have ran into this when doing ajax forms where I include multiple field sets. Taking for example an employment application. I start out with one professional reference set and I have a button that says "Add More". This does an ajax call with a $count parameter to include the input set again (name, contact, phone.. etc) This works fine on first page call as I do something like:
<?php
include('references.php');`
?>
User presses a button that makes an ajax call ajax('references.php?count=1'); Then inside the references.php file I have something like:
<?php
$count = isset($_GET['count']) ? $_GET['count'] : 0;
?>
I also have other dynamic includes like this throughout the site that pass parameters. The problem happens when the user presses submit and there is a form error. So now to not duplicate code to include those extra field sets that where dynamically included, i created a function that will setup the include with the appropriate GET params.
<?php
function include_get_params($file) {
$parts = explode('?', $file);
if (isset($parts[1])) {
parse_str($parts[1], $output);
foreach ($output as $key => $value) {
$_GET[$key] = $value;
}
}
include($parts[0]);
}
?>
The function checks for query params, and automatically adds them to the $_GET variable. This has worked pretty good for my use cases.
Here is an example on the form page when called:
<?php
// We check for a total of 12
for ($i=0; $i<12; $i++) {
if (isset($_POST['references_name_'.$i]) && !empty($_POST['references_name_'.$i])) {
include_get_params(DIR .'references.php?count='. $i);
} else {
break;
}
}
?>
Just another example of including GET params dynamically to accommodate certain use cases. Hope this helps. Please note this code isn't in its complete state but this should be enough to get anyone started pretty good for their use case.
You can use $GLOBALS to solve this issue as well.
$myvar = "Hey";
include ("test.php");
echo $GLOBALS["myvar"];
If anyone else is on this question, when using include('somepath.php'); and that file contains a function, the var must be declared there as well. The inclusion of $var=$var; won't always work. Try running these:
one.php:
<?php
$vars = array('stack','exchange','.com');
include('two.php'); /*----- "paste" contents of two.php */
testFunction(); /*----- execute imported function */
?>
two.php:
<?php
function testFunction(){
global $vars; /*----- vars declared inside func! */
echo $vars[0].$vars[1].$vars[2];
}
?>
Try this also
we can have a function inside the included file then we can call the function with parametrs.
our file for include is test.php
<?php
function testWithParams($param1, $param2, $moreParam = ''){
echo $param1;
}
then we can include the file and call the function with our parameters as a variables or directly
index.php
<?php
include('test.php');
$var1 = 'Hi how are you?';
$var2 = [1,2,3,4,5];
testWithParams($var1, $var2);
Your question is not very clear, but if you want to include the php file (add the source of that page to yours), you just have to do following :
if(condition){
$someVar=someValue;
include "myFile.php";
}
As long as the variable is named $someVar in the myFile.php
I was in the same situation and I needed to include a page by sending some parameters... But in reality what I wanted to do is to redirect the page... if is the case for you, the code is:
<?php
header("Location: http://localhost/planner/layout.php?page=dashboard");
exit();
?>

modify array value from php file in codeigniter or php

i have php file like below and i want to read this php file and get all array value in this php file and i can update value of array
<?php
$lang['country_name']="Country Name";
$lang['zip_code']="Zip Code";
$lang['flag']="Flag";
$lang['site_enabled']="Site Enabled";
$lang['save']="Save";
$lang['cancel']="Cancel";
$lang['country_info']="Country Information";
$lang['new_country']="New Country";
$lang['edit_country']="Edit Counry";
$lang['country']="Country";
$lang['home']="Home";
$lang['no']="No";
$lang['action']="Action";
$lang['show']="Show";
?>
If you want to include this PHP array in another script, you can use the include function.
For example, if you have another file, index.php in the same directory, you can include it and then you will have access to the variable. You can modify it like a normal variable, like so:
index.php
<?php
include `lang_array.php`; // will get the file with the array
echo $lang["no"]; // should output "No"
$lang["show"] = "value"; // update $lang["show"]
?>
Simply you just have include file using php include function.
<?php
include 'file_name.php';
$lang['new_country']="new country 1";
?>

Categories