Reputation: 301
I have a strange problem with PHP and CodeIgniter. Here's the code of my file:
Skip this code and go to the second one I wrote. This remains here in case it might be useful.
<?php if (! defined('BASEPATH')) exit('No direct script access allowed');
require_once('utils.php');
class FooterHeader {
// Esta clase nos permite definir el footer y sus correspondientes menus
var $utils;
var $controller;
var $TOPMENU_NOT_LOGGED_IN_NAMES;
var $TOPMENU_NOT_LOGGED_IN_LINKS;
var $TOPMENU_LOGGED_IN_NAMES;
var $TOPMENU_LOGGED_IN_LINKS;
var $TOPMENU_DESIGNER_NAMES;
var $TOPMENU_DESIGNER_LINKS;
// Side menu
var $SIDEMENU_NOT_LOGGED_IN_NAMES;
var $SIDEMENU_NOT_LOGGED_IN_LINKS;
var $SIDEMENU_LOGGED_IN_NAMES;
var $SIDEMENU_LOGGED_IN_LINKS;
var $SIDEMENU_DESIGNER_NAMES;
var $SIDEMENU_DESIGNER_LINKS;
// Main menu
var $MAINMENU_NOT_LOGGED_IN_NAMES;
var $MAINMENU_NOT_LOGGED_IN_LINKS;
var $MAINMENU_LOGGED_IN_NAMES;
var $MAINMENU_LOGGED_IN_LINKS;
var $MAINMENU_DESIGNER_NAMES;
var $MAINMENU_DESIGNER_LINKS;
function FooterHeader($controller) {
$this->utils = new Utils();
$this->controller = $controller;
include_once 'defineMenus.php';
configVars($this);
}
public function setDefaultHeader($situation) {
$topMenuNames = array();
$topMenulinks = array();
$MainMenuNames = array ();
$MainMenuLinks = array ();
$SideMenuLinks = array ();
$SideMenuNames = array ();
// dependiendo del estado del usuario, mostramos cosas u otras
if ($situation == NOT_LOGGED_IN) {
$topMenuNames = $this->TOPMENU_NOT_LOGGED_IN_NAMES;
$topMenuLinks = array ('users/login', 'users/register');
$MainMenuNames = $this->MAINMENU_NOT_LOGGED_IN_NAMES;
$MainMenuLinks = $this->MAINMENU_NOT_LOGGED_IN_LINKS;
$SideMenuLinks = $this->SIDEMENU_NOT_LOGGED_IN_NAMES;
$SideMenuNames = $this->SIDEMENU_NOT_LOGGED_IN_LINKS;
}
else if ($situation == LOGED_IN) {
$topMenuNames = $this->TOPMENU_LOGGED_IN_NAMES;
$topMenuLinks = $this->TOPMENU_LOGGED_IN_LINKS;
$MainMenuNames = $this->MAINMENU_LOGGED_IN_NAMES;
$MainMenuLinks = $this->MAINMENU_LOGGED_IN_LINKS;
$SideMenuLinks = $this->SIDEMENU_LOGGED_IN_NAMES;
$SideMenuNames = $this->SIDEMENU_LOGGED_IN_LINKS;
}
else if ($situation == DESIGNER) {
$topMenuNames = $this->TOPMENU_DESIGNER_NAMES;
$topMenuLinks = $this->TOPMENU_DESIGNER_LINKS;
$MainMenuNames = $this->MAINMENU_DESIGNER_NAMES;
$MainMenuLinks = $this->MAINMENU_DESIGNER_LINKS;
$SideMenuLinks = $this->SIDEMENU_DESIGNER_NAMES;
$SideMenuNames = $this->SIDEMENU_DESIGNER_LINKS;
}
var_dump ($topMenuLinks);
$this->setHeader ($topMenulinks, $topMenuNames, $MainMenuLinks, $MainMenuNames, $SideMenuLinks, $SideMenuNames);
}
public function setHeader ($topMenuLinks, $linkNames, $menus, $menusNames, $sideMenuLinks, $sideMenuNames) {
var_dump ($topMenuLinks);
$enlaces = $this->generateTopMenu ($linkNames, $topMenuLinks);
$data['enlaces'] = $enlaces;
$menus = $this->generateMenus ($menusNames, $menus);
$data['menus'] = $menus;
$sideMenus = $this->generateSideMenu ($sideMenuLinks, $sideMenuNames);
$data['sideMenus'] = $sideMenus;
$this->controller->load->helper('html');
$this->controller->load->view('static/header.php', $data);
}
[...]
}
Do not read it all. It's not necessary. Just look at the two var_dump
calls. The first var_dump
prints out:
array (size=2)
0 => string 'users/login' (length=11)
1 => string 'users/register' (length=14)
The second one:
array (size=0)
empty
I don't know why my variable is uninitialized. The rest of the variables are all OK.
Simplified the code:
<?php
class FooterHeader {
function FooterHeader($controller) {
$this->controller = $controller;
}
public function setDefaultHeader($situation) {
$topMenulinks = array();
// dependiendo del estado del usuario, mostramos cosas u otras
$topMenuLinks = array('users/login', 'users/register');
var_dump($topMenuLinks);
$this->setHeader($topMenulinks);
}
public function setHeader($topMenuLinks) {
var_dump($topMenuLinks);
}
}
?>
But the problem is still occurring.
The code doing the calling is this:
<?php if (! defined('BASEPATH')) exit('No direct script access allowed');
require_once('utils/footerHeader.php');
require_once('utils/defineMenus.php');
class WelcomePage extends CI_Controller {
var $fh;
function WelcomePage() {
parent::__construct();
$this->fh = new footerHeader($this);
$this->load->helper('url');
}
public function index()
{
// seteamos el header (el defecto)
$this->fh->setDefaultHeader(NOT_LOGGED_IN);
$this->load->view('subirDisenyoEjemplo.php');
//$this->fh->setFooter();
}
}
/* End of file welcomePage.php */
/* Location: ./application/controllers/welcomePage.php */
?>
Upvotes: 1
Views: 330
Reputation: 5638
Watch out for capitalization:
var_dump($topMenuLinks);
$this->setHeader($topMenulinks);
$topMenu L inks vs. $topMenu l inks. I tried it on my server, and it immediately popped up as an uninitialized variable.
Originally:
The content of your array depends on the outcome of the if
- else if
construct. Only in this case
if ($situation == NOT_LOGGED_IN) {
will the array be assigned its value as in the first var_dump()
. Otherwise, you will end up with an empty array because it is initialized as
$topMenulinks = array();
if you have any situation
not covered by LOGED_IN
or DESIGNER
. Watch out for the missing G in LOGED_IN
.
Upvotes: 1
Reputation: 841
Without the calling code it's kind of hard to determine, but I did find this:
$situation == LOGED_IN
$situation == LOGGED_IN
Upvotes: 1