如何从不同的XML将数据提供给CodeIgniter中的模型

时间:2016-02-12 15:43:28

标签: php jquery html codeigniter

我有一个带有Xml_model的CodeIgniter应用程序:

(add-to-list 'load-path "/home/user/emacsfiles")

我希望能够使用不同的XML加载此模型。这些XML由站点上的下拉菜单选择。 XML正在定义站点上的导航,因此在从下拉列表中选择XML后,页面将重新加载,并使用新选择的XML进行重新加载。但我不知道如何做到这一点,因为我无法在CodeIgniter中加载带有参数的模型。

下拉列表:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Xml_model extends CI_Model {

        private $xml;

        public function __construct() {
          parent::__construct();
          $this->xml = simplexml_load_file(base_url('xml/example.xml'));
        }

        public function getAllTags() {
          return array_unique($this->xml->xpath('descendant::Keyword'));
        }

        public function getLinks($nodeName) {
          return $this->xml->xpath('/Documents/TabPage/Node[@name="'.$nodeName.'"]/Links/Link');
        }

        public function getTabs() {
          return $this->xml->xpath('/Documents/TabPage/@name');
        }

        public function getNodes($tabName) {
          return $this->xml->xpath('/Documents/TabPage[@name="'.$tabName.'"]/Node/@name');
        }

        public function getPath($nodeName) {
          return $this->xml->xpath('/Documents/TabPage/Node[@name="'.$nodeName.'"]/Path');
        }

        public function search($tagName) {
          return $this->xml->xpath('//*[Keyword="'.$tagName.'"]/parent::Node/@name');
        }

}
?>

1 个答案:

答案 0 :(得分:0)

我可以想到两种方法来解决这个问题。

一:添加一个init函数,该函数将加载要加载的文件的名称。加载模型后立即调用它。

class Xml_model extends CI_Model 
{
    private $xml;

    public function init($file) {
        $this->xml = simplexml_load_file(base_url($file));
    }

另一种选择是创建一个新的库类而不是扩展CI_Model。根据你所展示的内容,没有明显要求将其作为&#34;模型&#34;类。

可以在加载时将参数传递给构造函数。我看到的唯一(非常小的)棘手的部分是对base_url()的调用将要求您获得对CI&#34;超级对象的引用&#34;。或者,您可以解析并传递构造函数的完整路径,从而无需在自定义类中调用base_url()