OpenCart load Model outside Controller

itd picture itd · Nov 22, 2012 · Viewed 17.8k times · Source

I'm working on an OpenCart project, that requires a lot of customization. for my project I have to change something in the cart library (system/library/cart.php).

I would have to call a custom function that's defined inside the product model (catalog/model/catalog/product.php).

In a controller, loading a Model and using its functions is easy:

    $this->load->model("catalog/product");
    $this->model_catalog_product->customFunction();

But how do you load a model outside a controller? You can't create a new instance of the model, I already tried that:

    require_once("catalog/model/catalog/product.php");
    $a_model = new ModelCatalogProduct();

This obviously doesn't work cause models weren't intended to be used in such a way.

I also tried to use the scope resolution operator ( ModelCatalogProduct::customFunction()) It doesn't work either.

I could pass all the required info as arguments, but I would rather use the model inside the cart library class, cause the changes would be global.

Is it even possible to load a model outside a controller in OpenCart?

Answer

Jay Gilford picture Jay Gilford · Nov 22, 2012

If it's only one method that you need to copy, you would be best adding a method to the Cart class itself. The Cart class will work with the $this->db->query() calls as it already has $db assigned to it even though it's not a Controller/Model

Edit

Should you wish to do this, you could do something similar to the following

public function test() {
    global $loader, $registry;
    $loader->model('catalog/product');
    $model = $registry->get('model_catalog_product');
    $result = $model->getProduct(123);
}