【问题标题】:How to test if a category already exists? PrestaShop如何测试一个类别是否已经存在? PrestaShop
【发布时间】:2019-05-28 15:34:55
【问题描述】:

我从其他数据库 Web 服务获取类别,并在刷新文件以添加类别时将它们放在 PrestaShop 上我想确保类别 ID 是否存在,如果存在我想更新类别。

$XMLRQString = '<?xml version="1.0" encoding="utf-8"?>'.
    '<x:Winmax4GetFamiliesRQ xmlns:x="urn:Winmax4GetFamiliesRQ">'.
    '</x:Winmax4GetFamiliesRQ >';

$return = $client->GetFamilies($Params);
$XMLRSString = new SimpleXMLElement($return->GetFamiliesResult);
if ($XMLRSString->Code > 0)
    echo '</br>Error: '.$XMLRSString->Code." ".$XMLRSString->Message;
else{

        foreach ($XMLRSString->Families->Family as $family)
        {   

            $category = new Category();

            $category->id = $family->Code;

            $category->force_id = true;

            $category->is_root_category = false;

            $category->name = array((int)Configuration::get('PS_LANG_DEFAULT') => $family->Designation);

            $category->link_rewrite = array((int)Configuration::get('PS_LANG_DEFAULT') =>  $family->Code);

            $category->id_parent = Configuration::get('PS_HOME_CATEGORY');

            $category->add();

        }
    }

【问题讨论】:

    标签: php xml web-services prestashop


    【解决方案1】:

    一般来说,如果您有大量数据(还有安全数据),最好将数据直接插入到数据库中。使用 Db 类而不是 Category 类。

    否则,您必须使用 save() 方法而不是 add() 方法

    【讨论】:

    • 这是一个选项,但就我的目标而言,它不起作用。还是谢谢
    【解决方案2】:

    这可行:

    $default_lang = (int)Configuration::get('PS_LANG_DEFAULT');
    $home = (int)Configuration::get('PS_HOME_CATEGORY');
    $category = new Category((int)$family->Code);
    $category->is_root_category = false;
    $category->name = array($default_lang => $family->Designation);
    $category->link_rewrite = array($default_lang => $family->Code);
    $category->id_parent = $home;
    $category->save();
    

    此外,您始终可以使用Validate::isLoadedObject() 静态方法检查对象是否有效。

    【讨论】:

    • 谢谢,但它不起作用,因为如果我删除 Prestashop 上的类别,它不会在我执行文件创建类别时添加。
    • save() 方法将在类别不存在时创建它,如果存在则更新它。这就是它的作用return (int) $this-&gt;id &gt; 0 ? $this-&gt;update($null_values) : $this-&gt;add($auto_date, $null_values);。我希望这会有所帮助。
    • 它现在正在工作,但没有在 ps_category 上添加,因此不在 PrestaShop 商店中显示,而是在其他表上添加
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 2021-12-23
    相关资源
    最近更新 更多