Использование приложения prestashop из скрипта, расположенного за пределами папки prestashop

Использование приложения prestashop из скрипта, расположенного за пределами папки prestashop

18.08.2015 08:22:42 Просмотров 42 Источник

Я хотел бы использовать приложение 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

Marcos Lois Bermúdez

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.

Я надеюсь, что это может помочь.

Wolfack

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();

Надеюсь, это поможет.

Закрыть X