Использование приложения prestashop из скрипта, расположенного за пределами папки prestashop
Я хотел бы использовать приложение prestashop из php-скрипта (external_script.php), расположенный за пределами папки prestashop, но все еще на том же сервере.
Я мог бы сделать это с помощью Magento, используя :
require_once external_folder/magento/app/Mage.php;
Я попытался включить prestashop / config/config.инк.на PHP и движке PrestaShop/инит.на PHP но он перенаправляет external_script.php для индекса prestashop.РНР
Любая помощь будет принята с благодарностью.
Стеф
Ответы - Использование приложения prestashop из скрипта, расположенного за пределами папки prestashop / Using prestashop app from script located outside prestashop folder

13.09.2015 02:28:26
Magento-это хорошо структурированный проект Zend, и легко загрузить приложение, чтобы использовать его вне http front controller, PrestaShop-это другая история, это действительно большой беспорядок кода спагетти, чтобы загрузить приложение действительно зависит от версии os PS и в некоторых случаях от установленных модулей, которые изменяют поведение ядра.
Для начала вы можете сначала включить config/config.инк.php файл, который находится на PS корня Дира, это инит ПС classloader и куча конфигурация определяет, если вы используете другой загрузчик и старые версии на PS (<1.6) вам нужно, чтобы обойти его, это простой загрузочный код, что позволит сделать любую PS вызова:
<?php
// Load PS config and autoloader
define ('PS_DIR', __DIR__ . '/../ps-wtf');
require_once PS_DIR .'/config/config.inc.php';
// I use this to load compoper dependencies
require_once __DIR__ . '/../vendor/autoload.php';
// Call old __autoload() if present, required for PrestaShop old versions
if (function_exists('__autoload')) {
spl_autoload_register(function ($className) {
__autoload($className);
});
}
// Init Shop context, required some operation will fail without it
// adust accordly to multistore PS >= 1.6
Shop::setContext(Shop::CONTEXT_ALL);
// Init PS context, some modules require that this context was initialized and with correct data
// some core function fired in the admin require at least a employee
define ('PS_DEFAULT_EMPLOYEE', 1);
$psContext = Context::getContext();
if (!$psContext->employee) {
$psContext->employee = new Employee(PS_DEFAULT_EMPLOYEE);
}
// You can make any API call
$cat = new Category();
$cat->name = [
1 => 'New',
2 => 'Nuevo',
];
$cat->id_parent = 1;
$cat->save();
echo $cat->id;
Некоторые функции PS зависят от правильной инициализации некоторых основных классов (да, это безумие), вы можете взглянуть на ControllerCore и FrontControllerCore, чтобы увидеть, что происходит в обычном потоке запросов PS.
Я надеюсь, что это может помочь.

06.01.2018 12:22:33
Добавьте следующие 2 строки в начале вашего PHP скрипта и тогда вы сможете использовать все классы и функции PrestaShop:
include(dirname(__FILE__).'/../../config/config.inc.php');
include(_PS_ROOT_DIR_.'/init.php');
Кроме того, включите основной файл класса, функции которого вы хотите вызвать во внешнем скрипте, это должен быть файл вашего модуля. Например:
include_once(__PATH__TO__CLASS__FILE__.'/xyzmodule.php');
После добавления вышеуказанных кодов для включения необходимых файлов вы можете просто создать объекты файла класса, который вы хотите вызвать, и использовать его код. Например:
$xObj = new Xyzmodule();
$xObj->callingXFunction();
Надеюсь, это поможет.