问题
Problem
Related issue, I have been trying to apply related solution to my project, however I am not able to execute
Module::getInstanceByName('modulename');
I do not even have access to Module class, which makes it hard for me to access application context and my own module context
class_exists('Module')
Returns false.
I also provide the directory structure of my module from which I am attempting to access Module.
├── mymodule.php
├── config.xml
└── somedirectory
└── index.php
Where mymodule.php follows the module class guidelines and index.php is just php file in which I attempt to access other modules. most important for me is to access the context of my own module so that I can retrieve for example it's version and other settings.
Example source
Example of index.php from my testmodule, this example is for 1.4 but I am also willing to have it working for 1.5 and 1.6
require('../../../config/settings.inc.php');
require('../../../classes/Module.php');
$instance = Module::getInstanceByName('mymodule');
This crashes, and when I use
require('../../../config/settings.inc.php');
require('../../../classes/Module.php');
if (class_exists('Module')) {
echo "class exists";
} else {
echo "class does not exists";
}
It outputs class does not exists.
The reason I require ../../../config/settings.inc.php is to demonstrate that there are some classes I can require and it works. I am able to access constants defined inside of settings.inc.php
So the file at relative path ../../../classes/Module.php exists and it contains
...
public static function getInstanceByName($moduleName)
...
Questions
- How to properly access
Moduleclass to access instance of particular module just as suggested here. What is the proper way of loading Prestashop classes from within an arbitrary file in the custom module. - Why I can import
../../../config/settings.inc.phpusingrequireand it doesn't apply to../../../classes/Module.php? - This issue concerns Prestashop
1.4, however I would like to know if can this be applied also for1.5and1.6, I noticed that for those versionsclasses/module.phpdoes not exists instead there isclasses/module/Module.php. General solution would be the best.
回答1:
If you call your index.php file directly (http://www.example.com/modules/mymodule/somedirectory/index.php) you're not using Prestashop internal Dispatcher. This means that Prestashop is not loaded when your index.php script is executed.
If you want to load Prestashop your first need to include /config/config.inc.php:
require('../../../config/config.inc.php');
if (class_exists('Module')) {
echo "class exists";
} else {
echo "class does not exists";
}
If you want to use Prestashop standard Dispatcher process, you will have to create a ModuleFrontController.
来源:https://stackoverflow.com/questions/38303955/prestashop-cannot-require-module-class