从位于prestashop文件夹外的脚本使用prestashop应用程序

从位于prestashop文件夹外的脚本使用prestashop应用程序,prestashop,Prestashop,我想从一个php脚本(external_script.php)使用prestashop应用程序,该脚本位于prestashop文件夹之外,但仍然在同一台服务器上 我可以使用Magento来实现这一点: require_once external_folder/magento/app/Mage.php; 我试图包括prestashop/config/config.inc.php和prestashop/init.php,但它将external_script.php重定向到prestasho

我想从一个php脚本(external_script.php)使用prestashop应用程序,该脚本位于prestashop文件夹之外,但仍然在同一台服务器上

我可以使用Magento来实现这一点:

    require_once external_folder/magento/app/Mage.php;
我试图包括prestashop/config/config.inc.php和prestashop/init.php,但它将external_script.php重定向到prestashop index.php

任何帮助都将不胜感激


STEF

Magento是一个结构良好的Zend项目,很容易引导应用程序在HTTP前端控制器之外使用,PrestaShop是另一个故事,它真的是一大堆意大利面代码,引导应用程序实际上取决于os PS版本,在某些情况下取决于改变核心行为的已安装模块


首先,您可以在PS根目录中包含config/config.inc.php文件,如果您在PS上使用另一个autoloader和一个旧版本(在php脚本的开头添加以下两行代码),这将初始化PS类加载器和一组配置定义,然后您可以使用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();
添加上述代码以包含所需文件后,您只需创建要调用的类文件的对象并使用其代码即可。例如:

include_once(__PATH__TO__CLASS__FILE__.'/xyzmodule.php');
$xObj = new Xyzmodule();
$xObj->callingXFunction();

希望这能有所帮助。

prestashop的设计方式不会让您轻松完成这类工作。 我认为您最好使用他们的web服务API:

有一个PHP客户端库用于此:

您也可以使用curl,但要注意:他们在不同的页面上使用了很多不同的标记,这非常烦人

下面是一些bash代码,您可以登录,获取一些令牌并上传导入文件。您可以将其改编为PHP curl并执行任何其他操作:

r=$(curl -k -c cookies -b cookies -s --request POST -d "ajax=1&token=&controller=AdminLogin&submitLogin=1&passwd=[YOU_PASSWORD_URL_ENCODED]&email=[YOUR_EMAIl_URL_ENCODED]" 'https://[YOUR_PRESTASHOP_HOST_OR_LOCALHOST]/[YOUR_PRESTASHOP_ADMIN_DIR]/index.php')
token=$(echo $r | sed -n 's/.*token=\([0-9a-zA-Z]*\).*/\1/gp')

admin_token=$(curl -k -c cookies -b cookies 'https://[YOUR_PRESTASHOP_HOST_OR_LOCALHOST]/[YOUR_PRESTASHOP_ADMIN_DIR]/index.php?controller=AdminDashboard&token='"$token" | sed -n '0,/.*?_token=\([-_0-9a-zA-Z]*\).*/s/.*?_token=\([-_0-9a-zA-Z]*\).*/\1/p')


brand_file_name=$(curl -k -c cookies -b cookies -F 'file=@local_path_of_a_file.xlsx' 'https://[YOUR_PRESTASHOP_HOST_OR_LOCALHOST]/[YOUR_PRESTASHOP_ADMIN_DIR]/index.php/configure/advanced/import/file/upload?_token='"$admin_token" | sed -nE 's/.*"name":"([^"]*).*/\1/gp')

还可以使用$module=module::getInstanceByName($name)来获取模块;