从管理端使用前端模型功能

问题描述 投票:0回答:3

我正在开发 OpenCart 版本 1.5.1.3。在某一阶段,我想在管理端控制器文件中使用前端模型功能。

我可以做什么来实现这个目标?

php opencart
3个回答
5
投票

我知道已经晚了,但也许对未来的工作有用。
您只需向您的

/system/engine/loader.php
添加一个功能即可。但您可能知道直接这样做可能会在将来伤害您。所以通过
vqmod
来做到这一点。我会告诉你如何:

<?xml version="1.0" encoding="UTF-8"?>
<modification>
    <id>Loadin Catalog Models</id>
    <version>1.0</version>
    <vqmver>2.X</vqmver>
    <author>Hossein Shahsahebi</author>  
    <file name="system/engine/loader.php">
        <operation info="Add function which I could access catalog models from admin">
            <search position="after"><![CDATA[
                 protected $registry;
            ]]></search>
            <add><![CDATA[
                public function catalogModel($model) {
                    $file = DIR_CATALOG . 'model/' . $model . '.php';
                    $class = 'Model' . preg_replace('/[^a-zA-Z0-9]/', '', $model);

                    if (file_exists($file)) {
                       include_once($file);

                       $this->registry->set('model_' . str_replace('/', '_', $model), new $class($this->registry));
                    } else {
                       trigger_error('Error: Could not load model ' . $model . '!');
                       exit();               
                    }
                }
            ]]></add>
        </operation>
    </file>
</modification>  

您可以将此代码放在文件名

your_own_chosen_name.xml
中,然后将其放在
/vqmod/xml
中。
现在使用例如
shipping/flat
管理中的目录目录模型使用此:

$this->load->catalogModel('shipping/flat');

3
投票

简单地说,你不能。您需要做的是,如果管理端不存在同名模型文件,则复制模型文件,或者将您需要的方法添加到管理端模型文件中


2
投票

这就是我所做的: 你有一个模型catalog/model/foo/frontbar.php 和另一个模型 admin/model/foo/adminbar.php

你想在adminbar.php中包含frontbar.php,然后访问frontbar的方法。

在 adminbar.php 中执行如下操作:

<?php
include_once __DIR__.'/../../../catalog/model/foo/frontbar.php';

class ModelFooAdminbar extends Model {

  private $frontInstance;
  public function fromFront()
  {
    if(!$this->frontInstance){
        $this->frontInstance = new ModelFooFrontbar($this->registry);
    }

     return $this->frontInstance;
  }
}
?>

然后在您的管理控制器中执行以下操作:

$this->load->model('foo/adminbar');
$this->data['someFrontData'] = $this->model_foo_adminbar->fromFront()->getSomeMethodInFrontbar();
© www.soinside.com 2019 - 2024. All rights reserved.