扩展 prestashop web 服务资源

2023-11-26

我正在尝试延长carts多一个字段的资源应输出以下结果Cart::getSummaryDetails称呼。我已经延长了CartCore类添加新参数和相应的方法,如下所示:

class Cart extends CartCore
{
    protected $webserviceParameters = [
        'fields'       => [
            'id_address_delivery' => ['xlink_resource' => 'addresses'],
            'id_address_invoice'  => ['xlink_resource' => 'addresses'],
            'id_currency'         => ['xlink_resource' => 'currencies'],
            'id_customer'         => ['xlink_resource' => 'customers'],
            'id_guest'            => ['xlink_resource' => 'guests'],
            'id_lang'             => ['xlink_resource' => 'languages'],
        ],
        'associations' => [
            'cart_rows' => [
                'resource'       => 'cart_row',
                'virtual_entity' => true,
                'fields'         => [
                    'id_product'           => ['required' => true, 'xlink_resource' => 'products'],
                    'id_product_attribute' => ['required' => true, 'xlink_resource' => 'combinations'],
                    'id_address_delivery'  => ['required' => true, 'xlink_resource' => 'addresses'],
                    'quantity'             => ['required' => true],
                ],
            ],
            'summary'   => [
                'getter'         => 'getWsSummaryDetails',
                'setter'         => false,
                'virtual_entity' => true,
            ],
        ],
    ];

    public function getWsSummaryDetails()
    {
        $result = $this->getSummaryDetails(null, true);
        unset($result['carrier']);
        unset($result['delivery']);
        unset($result['invoice']);
        return $result;
    }
}

预期的输出应该是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<carts>
    <cart>
        <id>105</id>
        <id_address_delivery xlink:href="http://prestashop.lo/api/addresses/8">8</id_address_delivery>
        <id_address_invoice xlink:href="http://prestashop.lo/api/addresses/8">8</id_address_invoice>
        <id_currency xlink:href="http://prestashop.lo/api/currencies/1">1</id_currency>
        <id_customer xlink:href="http://prestashop.lo/api/customers/8">8</id_customer>
        <id_guest>0</id_guest>
        <id_lang xlink:href="http://prestashop.lo/api/languages/1">1</id_lang>
        <id_shop_group>0</id_shop_group>
        <id_shop>1</id_shop>
        <id_carrier>4</id_carrier>
        <recyclable>0</recyclable>
        <gift>0</gift>
        <gift_message/>
        <mobile_theme>0</mobile_theme>
        <delivery_option/>
        <secure_key>ced146ac54cc140e7d8da06469003688</secure_key>
        <allow_seperated_package>0</allow_seperated_package>
        <date_add>2016-06-20 11:14:31</date_add>
        <date_upd>2016-06-20 11:14:31</date_upd>
        <associations>
            <cart_rows nodeType="cart_row" virtualEntity="true">
                <cart_row>
                    <id_product xlink:href="http://prestashop.lo/api/products/8">8</id_product>
                    <id_product_attribute xlink:href="http://prestashop.lo/api/combinations/0">0</id_product_attribute>
                    <id_address_delivery xlink:href="http://prestashop.lo/api/addresses/8">8</id_address_delivery>
                    <quantity>1</quantity>
                </cart_row>
                <cart_row>
                    <id_product xlink:href="http://prestashop.lo/api/products/11">11</id_product>
                    <id_product_attribute xlink:href="http://prestashop.lo/api/combinations/0">0</id_product_attribute>
                    <id_address_delivery xlink:href="http://prestashop.lo/api/addresses/8">8</id_address_delivery>
                    <quantity>1</quantity>
                </cart_row>
            </cart_rows>
            <summary nodeType="cart_summary" api="summary">
                <products/>
                <gift_products/>
                <discounts/>
                <is_virtual_cart/>
                <total_discounts/>
                <total_discounts_tax_exc/>
                <total_wrapping/>
                <total_wrapping_tax_exc/>
                ... <!-- and so on -->
            </summary>
        </associations>
    </cart>
</carts>
</prestashop>

但我得到<summary>[Array]</summary>或 xml 解析错误。

我尝试添加的另一种方式cart_summary是为了创造CartSummary需要的对象$webserviceParameters字段。但我不知道如何从这个字段获取值以及如何关联它cart_summary对象与carts资源。


嗯,调试是灵丹妙药。事实证明扩展更容易一些carts资源比我想象的要多。 首先,不需要制造任何额外的资源。我们唯一需要的就是列出我们需要的字段并设置它们的 getter。我的扩展Cart class:

class Cart extends CartCore
{
    protected $webserviceParameters = [
        'fields'       => [
            'id_address_delivery' => ['xlink_resource' => 'addresses'],
            'id_address_invoice'  => ['xlink_resource' => 'addresses'],
            'id_currency'         => ['xlink_resource' => 'currencies'],
            'id_customer'         => ['xlink_resource' => 'customers'],
            'id_guest'            => ['xlink_resource' => 'guests'],
            'id_lang'             => ['xlink_resource' => 'languages'],
        ],
        'associations' => [
            'cart_rows'    => [
                'resource'       => 'cart_row',
                'virtual_entity' => true,
                'fields'         => [
                    'id_product'           => ['required' => true, 'xlink_resource' => 'products'],
                    'id_product_attribute' => ['required' => true, 'xlink_resource' => 'combinations'],
                    'id_address_delivery'  => ['required' => true, 'xlink_resource' => 'addresses'],
                    'quantity'             => ['required' => true],
                ],
            ],
            'cart_summary' => [
                'resource'       => 'cart_summary_row',
                'virtual_entity' => true,
                'setter'         => false,
                'fields'         => [
                    'id'                        => '',
                    'is_virtual_cart'           => '',
                    'total_discounts'           => '',
                    'total_discounts_tax_exc'   => '',
                    'total_wrapping'            => '',
                    'total_wrapping_tax_exc'    => '',
                    'total_shipping'            => '',
                    'total_shipping_tax_exc'    => '',
                    'total_products_wt'         => '',
                    'total_products'            => '',
                    'total_price'               => '',
                    'total_tax'                 => '',
                    'total_price_without_tax'   => '',
                    'is_multi_address_delivery' => '',
                    'free_ship'                 => '',
                ],
            ],
        ],
    ];


    /**
     * @return array
     */
    public function getWsCartSummary()
    {
        $result = $this->getSummaryDetails(null, true);
        unset($result['carrier']);
        unset($result['delivery']);
        unset($result['invoice']);
        $result['id'] = $this->id;
        return ['cart_summary' => $result];
    }
}

WebserviceOutputBuilder不太适合处理对象,需要制作更复杂的字段列表和获取器。我只需要标量值。所以我已经取消设置了carrier, delivey and invoice对象。 Prestashop 搜索 gettergetWsCartSummary()对于字段cart_summary默认情况下。如果你有any_other场,这将是getWsAnyOther().

我得到的结果:

<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<carts>
<cart>
    <id><![CDATA[108]]></id>
    <id_address_delivery xlink:href="http://prestashop.lo/api/addresses/5"><![CDATA[5]]></id_address_delivery>
    <id_address_invoice xlink:href="http://prestashop.lo/api/addresses/5"><![CDATA[5]]></id_address_invoice>
    <id_currency xlink:href="http://prestashop.lo/api/currencies/1"><![CDATA[1]]></id_currency>
    <id_customer xlink:href="http://prestashop.lo/api/customers/2"><![CDATA[2]]></id_customer>
    <id_guest xlink:href="http://prestashop.lo/api/guests/25"><![CDATA[25]]></id_guest>
    <id_lang xlink:href="http://prestashop.lo/api/languages/1"><![CDATA[1]]></id_lang>
    <id_shop_group><![CDATA[1]]></id_shop_group>
    <id_shop><![CDATA[1]]></id_shop>
    <id_carrier><![CDATA[5]]></id_carrier>
    <recyclable><![CDATA[0]]></recyclable>
    <gift><![CDATA[0]]></gift>
    <gift_message></gift_message>
    <mobile_theme><![CDATA[0]]></mobile_theme>
    <delivery_option></delivery_option>
    <secure_key><![CDATA[18fcd352cc7355102674d9056705f43c]]></secure_key>
    <allow_seperated_package><![CDATA[0]]></allow_seperated_package>
    <date_add><![CDATA[2016-06-24 09:34:42]]></date_add>
    <date_upd><![CDATA[2016-06-27 03:23:18]]></date_upd>
<associations>
<cart_rows nodeType="cart_row" virtualEntity="true">
    <cart_row>
    <id_product xlink:href="http://prestashop.lo/api/products/5"><![CDATA[5]]></id_product>
    <id_product_attribute xlink:href="http://prestashop.lo/api/combinations/19"><![CDATA[19]]></id_product_attribute>
    <id_address_delivery xlink:href="http://prestashop.lo/api/addresses/5"><![CDATA[5]]></id_address_delivery>
    <quantity><![CDATA[1]]></quantity>
    </cart_row>
    <cart_row>
    <id_product xlink:href="http://prestashop.lo/api/products/6"><![CDATA[6]]></id_product>
    <id_product_attribute xlink:href="http://prestashop.lo/api/combinations/31"><![CDATA[31]]></id_product_attribute>
    <id_address_delivery xlink:href="http://prestashop.lo/api/addresses/5"><![CDATA[5]]></id_address_delivery>
    <quantity><![CDATA[1]]></quantity>
    </cart_row>
    <cart_row>
    <id_product xlink:href="http://prestashop.lo/api/products/11"><![CDATA[11]]></id_product>
    <id_product_attribute xlink:href="http://prestashop.lo/api/combinations/0"><![CDATA[0]]></id_product_attribute>
    <id_address_delivery xlink:href="http://prestashop.lo/api/addresses/5"><![CDATA[5]]></id_address_delivery>
    <quantity><![CDATA[1]]></quantity>
    </cart_row>
</cart_rows>
<cart_summary nodeType="cart_summary_row" virtualEntity="true">
    <cart_summary_row>
    <id><![CDATA[108]]></id>
    <is_virtual_cart></is_virtual_cart>
    <total_discounts></total_discounts>
    <total_discounts_tax_exc></total_discounts_tax_exc>
    <total_wrapping></total_wrapping>
    <total_wrapping_tax_exc></total_wrapping_tax_exc>
    <total_shipping></total_shipping>
    <total_shipping_tax_exc></total_shipping_tax_exc>
    <total_products_wt><![CDATA[67.06]]></total_products_wt>
    <total_products><![CDATA[64.48]]></total_products>
    <total_price><![CDATA[67.06]]></total_price>
    <total_tax><![CDATA[2.58]]></total_tax>
    <total_price_without_tax><![CDATA[64.48]]></total_price_without_tax>
    <is_multi_address_delivery></is_multi_address_delivery>
    <free_ship><![CDATA[1]]></free_ship>
    </cart_summary_row>
</cart_summary>
</associations>
</cart>
</carts>
</prestashop>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

扩展 prestashop web 服务资源 的相关文章

  • 如何修复 Laravel 中未找到的“PDF”类

    在我的 Laravel 应用程序中遇到以下错误 CollaboPDFController php 第 14 行中的 FatalErrorException 未找到 PDF 类 这是我的ColaboPDFController php
  • 如何使用 php imap 将邮件消息移动到文件夹

    我似乎无法将邮件移至已保存的文件夹 这是我的代码 mbox imap open mail server mail port mail folder mail username mail password or die Error openi
  • 知道何时调用 persist

    我正在使用 Doctrine 2 作为我的 ORM 一切进展顺利 但我一直想知道EntityManager persist 方法 这 持久实体 https www doctrine project org projects doctrine
  • PHP:如何发送电子邮件基础知识

    我想使用 PHP 从本地主机向其他人发送电子邮件 我需要做什么才能做到这一点 例如我需要安装邮件服务器吗 如果我没记错的话 有一种语言不需要邮件服务器来发送电子邮件 这样对吗 PHP ini里面有 邮件功能 如何配置这个 我在网上查了一下
  • 如何在 PHP 中运行 shell 脚本?

    我正在尝试使用 PHP 触发 shell 脚本的运行 本质上 当用户在我们用 PHP 编写的网站上完成一个操作时 我们希望触发一个 shell 脚本 该脚本本身调用一个 Java 文件 提前致谢 See shell exec http ph
  • 使用 DateTime 类计算日期差异时出错

    我正在尝试使用 DateTime 类 php gt 5 3 来计算 2 个日期的差异 手册中的示例简单明了 我尝试了该示例并且效果很好 但如果改变开始和结束日期 就会出现问题 this gt start date 2011 03 01 th
  • Opencart 的 $this->config->get('module_var_name')

    我正在尝试自定义 Opencart 支付模块 我看到很多地方都使用了配置信息 但我找不到任何创建正在使用的变量的内容 我知道在管理页面中 如果我选择 paypal 标准 我可以设置所有 配置 信息 但我找不到强调它的 模型 是否有模型 我希
  • PHP别名@函数

    我是 PHP 新手 看到一些使用 前缀调用函数 如 mysql ping 的示例 我感到很困惑 它是做什么用的 谷歌搜索 搜索没有太大帮助 因为 被丢弃并且 别名 不是足够好的关键字 抑制错误 警告和通知 如果你用自定义的方式补充它 你可以
  • PHP 和 MySQL 的重音字符错误

    我的问题是 直接通过 PHP 编写的内容是正确重音的 但是当重音单词来自 MySQL 时 字母会像这样 我尝试使用html charset as ISO 8859 1它修复了 MySQL 字母 但破坏了其他字母 解决这一切的一种方法是设置我
  • Laravel 类邮件程序不存在

    我将应用程序从 5 更新到 5 2 现在 当我调用 Mail send 时 它会返回一个异常 Class mailer 不存在 Mail send emails mail data gt content function m use to
  • Laravel 上传前如何压缩图像?

    我正在制作一个图片库网站 用户可以在其中上传任何图像 它们将显示在前端 我需要在不影响图像质量的情况下压缩图像 以减小图像大小 以便页面加载速度不会影响那么大 我使用以下代码来上传图像 rules array file gt require
  • EPi服务器开发

    除了 Episerver com 之外 使用EPiServer开发的人还使用哪些其他网站作为开发资源 一直在使用 coderesort com 但我发现它缺乏如何做事的示例 非常感谢 J 我用于EPiServer开发的通用资源 EPi服务器
  • PHP函数返回值到html标签

    我想获取函数的返回值并将其显示到特定的id 在我的 Class php 中 我有一个名为 login 的函数 用于验证密码是否正确 不正确
  • SVG 转 JPG / PNG

    有没有工作模块可以convert a SVG image into像素格式如JPEG or PNG 看看蜡染工具包 具体来说是光栅化器 http xmlgraphics apache org batik tools rasterizer h
  • 如何检查一个值是否已经存在以避免重复?

    我有一个 URL 表 但我不想要任何重复的 URL 如何使用 PHP MySQL 检查给定 URL 是否已在表中 如果您不想重复 可以执行以下操作 添加唯一性约束 use REPLACE http dev mysql com doc ref
  • phpstorm xdebug 与 symfony2 项目

    我正在尝试使用 xdebug 和 phpstorm 调试 symfony2 应用程序 我的本地开发环境是Ubuntu 14 04 with apache2 Xdebug版本是2 2 7 我在另一个 php 不是 symfony2 项目上使用
  • PHP:如何检查总数。 URL 中的参数?

    我正在使用 REQUEST 检索参数 有没有办法找到总数 URL 中的参数 而不是检索每个参数然后进行计数 这将为您提供总数 分隔的 URL 查询参数 count explode SERVER QUERY STRING 如果您只想要唯一的参
  • 有关于 PHP 中的 V8JS 的文档吗?

    有没有关于V8JS的文档 我是否只需要标准 PHP 或一些扩展即可使用 V8JS 我将非常感谢有关 PHP 中的 V8JS 的任何信息 要求 PHP 5 3 3 和 V8 库和标头安装在正确的路径中 Install http www php
  • 如何更改phpmyadmin MySQL的IP地址?

    我在 xampp 中更改了 apache 的 IP 地址 但无法连接到 MySQL 我认为问题是我的 apache 不在我的数据库的同一网络上 我的 apache 位于 192 168 1 10 而我的 MySQL 位于 127 0 0 1
  • 使用“AND”表达式构建动态 SQL,而不混淆嵌套条件?

    总的来说 我对 php 和编码相当陌生 我有一系列条件需要测试它们是否已设置 它们是 option1 option2 option3 if isset option1 if isset option2 if isset option3 qu

随机推荐