Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CodeIgniter] Problem z własną biblioteką.
Forum PHP.pl > Forum > PHP
NickOver
Cześć,
Mam następującą bibliotekę:
  1. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2.  
  3. class CI_Components{
  4. private $sorted_components = array();
  5. private $links_to_files = array();
  6. private $components = array();
  7.  
  8. function generate($components){
  9. $this->components = $components;
  10. $this->sorted_components = $this->sortComponents($this->components);
  11. $this->links_to_files['css'] = $this->createCssLinks($this->sorted_components['css']);
  12. $this->links_to_files['js'] = $this->createJsLinks($this->sorted_components['js']);
  13. return $this->links_to_files;
  14. }
  15.  
  16. private function sortComponents($components){
  17. foreach ($components as $component){
  18. var_dump($component);
  19. die;
  20. switch ($component['admin_components_to_add_file_type']){
  21. case 'js':
  22. $this->sorted_components['js'][] = $component;
  23. break;
  24. case 'css':
  25. $this->sorted_components['css'][] = $component;
  26. break;
  27. }
  28. }
  29. }
  30.  
  31. private function createCssLinks($css_files_data){
  32.  
  33. }
  34.  
  35. private function createJsLinks($js_files_data){
  36.  
  37. }
  38. }


Odwołuję się do niej z kontrolera:
  1. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2.  
  3. class Admin extends CI_Controller {
  4.  
  5. private $data = array();
  6. public $components = array();
  7.  
  8. public function __construct(){
  9. parent::__construct();
  10. $this->load->model('admin_model');
  11. $this->data['menu'] = $this->generate_menu();
  12. }
  13.  
  14. public function index(){
  15. $this->load->library('components');
  16. $this->components = $this->admin_model->getComponentsToAdd();
  17. $this->components->generate($this->components);
  18. }
  19.  
  20. private function generate_menu(){
  21. $data['menu_elements'] = $this->admin_model->getDefaultPagesToMenu();
  22. return $this->load->view('admin/menu', $data, TRUE);
  23. }
  24.  
  25. private function get_elements_to_add(){
  26. $data['elements_to_add'] = $this->admin_model->getElementsToAdd();
  27. $this->load->helper('components');
  28. }
  29. }


I funkcja modelu w który zwraca tablice z obiektami do wygenerowania:
  1. <?php
  2.  
  3. class Admin_Model extends CI_Model{
  4. private $_admin_default_pages = 'admin_default_pages';
  5. private $_admin_components_to_add = 'admin_components_to_add';
  6.  
  7. public function getDefaultPagesToMenu(){
  8. $query = $this->db->where('admin_default_pages_status', 1)->get($this->_admin_default_pages);
  9.  
  10. return $query->result_array();
  11. }
  12.  
  13. public function getComponentsToAdd(){
  14. $query = $this->db->where('admin_components_to_add_status', 1)->get($this->_admin_components_to_add);
  15.  
  16. return $query->result();
  17. }
  18.  
  19. }


Niestety wywala to dłąd:
  1. Fatal error: Call to a member function generate() on a non-object in /opt/lampp/htdocs/cms/application/controllers/admin.php on line 17


Metoda "getComponentsToAdd" z modelu zwraca mi dokładnie:
  1. array(1) {
  2. [0]=>
  3. object(stdClass)#21 (5) {
  4. ["admin_components_to_add_id"]=>
  5. string(1) "1"
  6. ["admin_components_to_add_file_type"]=>
  7. string(3) "css"
  8. ["admin_components_to_add_file_name"]=>
  9. string(4) "test"
  10. ["admin_components_to_add_extension"]=>
  11. string(3) "css"
  12. ["admin_components_to_add_status"]=>
  13. string(1) "1"
  14. }
  15. }


Próbowałem rozwiązać ten problem foreach'em:
  1. public function index(){
  2. $this->load->library('components');
  3. $this->components = $this->admin_model->getComponentsToAdd();
  4.  
  5. foreach ($this->components as $component){
  6. $this->components->generate($this->components);
  7. }
  8. }

Lecz, niestety to nie pomaga. Macie jakiś pomysł jak rozwiązać mój problem?

Z góry dzięki
Pozdrawiam
NickOver
kao3991
foreach'ujesz po $this->components, i wewnątrz pętli ciągle używasz $this->components zamiast bieżącego elementu. $component-> generate() wewnątrz foreacha powinno załatwić sprawę.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.