2013-06-28 4 views
0

У меня возникли проблемы с настройкой верхнего и нижнего колонтитула PDF, который я создаю с помощью FPDF и рамки Codeigniter. в этом коде я не могу переписать $ user variable в свой заголовок. Что я должен сделать, чтобы получить эту переменную .. код для класса заключается в следующем:Передача переменной класса класса Codeigniter классу FPDF

<?php 
date_default_timezone_set('Asia/Jakarta'); 
$user=$this->session->userdata('name'); 

class printFPDF extends FPDF{ 
    var $user; 
    function userdata($user){ 
     $this->user=$user; 
    } 
    // Page header 
    function Header(){ 
     global $user; 
     // Arial bold 15 
     $this->SetFont('Arial','I',8); 
     // Move to the right 
     $this->Cell(1); 
     // Title 
     $this->Cell(30,10,"Created by ".$this->user,0,0,'L'); 
     // Move to the right   
     $this->Cell(190); 
     // Line break 
     $this->Ln(15); 
    } 
} 

Любая помощь будет оценена.

+0

у вас есть сессия библиотека? –

+0

Если бы он этого не сделал, у него были бы ошибки. Вы не можете запросить метод для не-объекта. – machineaddict

ответ

0

Вы не передаете переменную нигде в класс PDF.

$user=$this->session->userdata('name'); 

Здесь вы правильно выбираете сеанс из Codeigniter ... внутри Codeigniter. Эта строка должна быть в контроллере, Model, независимо от того, но внутри Codeigniter, поскольку вы используете ее собственную библиотеку сеансов.

class printFPDF extends FPDF{ 
    var $user; 
    function userdata($user){ 
     $this->user=$user; 

}

Я вижу, что вы создали внутри этого специальный метод, чтобы назначить свойство $ пользователя. Это нормально и правильно.

Я не знаю, как вы загружаете класс FDPF, вы должны сделать его библиотекой и загрузить ее с помощью метода $ this-> load-> library() в CI.

Теперь, независимо от способа загрузки библиотеки FPDF внутри CI, вы должны получить экземпляр объекта библиотеки.

Пример (давайте представим, что вы не сделали это библиотека, а просто включен класс внутри контроллера, то же, в котором вы скачали переменную $ пользователя из CI сессии)

$fpdf = new printFPDF(); 

Теперь вам передать выполненное на заказ, созданную переменную пользователя $ и класс FPDF будет иметь его в наличии:

$fpdf->userdata($user); 
0

@Damien Pirsy: он не должен быть внутри CodeIgniter. Вы всегда можете ссылаться на экземпляр CodeIgniter в любом месте своего проекта.

Если экземпляр CodeIgniter в $ CI переменных, у вас есть доступ ко всему, что у вас есть в контроллере, модель, библиотека и т.д. Не забывайте использовать $ this-> CI вместо $ этой после выполнения этого , так:

<?php 
date_default_timezone_set('Asia/Jakarta'); 

class printFPDF extends FPDF{ 

    var $CI; 

    function __construct(){ 
     parent::__construct(); 
     $this->CI =& get_instance(); 
    } 

    function userdata($user){ 
     $this->CI->session->set_userdata('name', $user); 
    } 

    // Page header 
    function Header(){ 
     // Arial bold 15 
     $this->SetFont('Arial','I',8); 
     // Move to the right 
     $this->Cell(1); 
     // Title 
     $this->Cell(30,10,"Created by ".$this->CI->session->userdata('name'),0,0,'L'); 
     // Move to the right   
     $this->Cell(190); 
     // Line break 
     $this->Ln(15); 
    } 
} 
+0

Да, я знаю это, у меня был плохой выбор слов. Твой - еще один хороший метод достижения того же. Лично, однако, я бы отделил код, создаю геттер/сеттер для пользователя внутри класса FPDF и загрузил класс по требованию. Таким образом, вы можете использовать класс в другом проекте, отличном от CI, и работать с ним без изменений в других средах –