本文整理汇总了PHP中CSaleBasket::CheckFields方法的典型用法代码示例。如果您正苦于以下问题:PHP CSaleBasket::CheckFields方法的具体用法?PHP CSaleBasket::CheckFields怎么用?PHP CSaleBasket::CheckFields使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CSaleBasket
的用法示例。
在下文中一共展示了CSaleBasket::CheckFields方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: _Update
function _Update($ID, &$arFields)
{
global $DB;
$ID = (int) $ID;
//CSaleBasket::Init();
if (!CSaleBasket::CheckFields("UPDATE", $arFields, $ID)) {
return false;
}
foreach (GetModuleEvents("sale", "OnBeforeBasketUpdateAfterCheck", true) as $arEvent) {
if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false) {
return false;
}
}
$arOldFields = false;
$updateHistory = isset($arFields["ORDER_ID"]) && (int) $arFields["ORDER_ID"] > 0;
$strUpdate = $DB->PrepareUpdate("b_sale_basket", $arFields);
if (!empty($strUpdate)) {
if ($updateHistory) {
$oldOrderIterator = CSaleBasket::GetList(array(), array('ID' => $ID), false, false, array_keys($arFields));
$arOldFields = $oldOrderIterator->Fetch();
}
$strSql = "update b_sale_basket set " . $strUpdate . ", DATE_UPDATE = " . $DB->GetNowFunction() . " where ID = " . $ID;
$DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
} else {
$updateHistory = false;
}
if (isset($arFields["PROPS"]) && !empty($arFields["PROPS"]) && is_array($arFields["PROPS"])) {
$sql = "delete from b_sale_basket_props where BASKET_ID = " . $ID;
$bProductXml = false;
$bCatalogXml = false;
foreach ($arFields["PROPS"] as $prop) {
if (!isset($prop['CODE'])) {
continue;
}
if ($prop["CODE"] == "PRODUCT.XML_ID") {
$bProductXml = true;
}
if ($prop["CODE"] == "CATALOG.XML_ID") {
$bCatalogXml = true;
}
if ($bProductXml && $bCatalogXml) {
break;
}
}
if (!$bProductXml) {
$sql .= " and CODE <> 'PRODUCT.XML_ID'";
}
if (!$bCatalogXml) {
$sql .= " and CODE <> 'CATALOG.XML_ID'";
}
$DB->Query($sql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
if (!$bProductXml || !$bCatalogXml) {
$sql = "delete from b_sale_basket_props where BASKET_ID = " . $ID . " and CODE IS NULL";
$DB->Query($sql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
}
foreach ($arFields["PROPS"] as $prop) {
if (!isset($prop["NAME"])) {
continue;
}
$prop["NAME"] = (string) $prop["NAME"];
if ($prop["NAME"] != '') {
$arInsert = $DB->PrepareInsert("b_sale_basket_props", $prop);
$strSql = "INSERT INTO b_sale_basket_props(BASKET_ID, " . $arInsert[0] . ") VALUES(" . $ID . ", " . $arInsert[1] . ")";
$DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
}
}
}
if ($updateHistory) {
CSaleOrderChange::AddRecordsByFields($arFields["ORDER_ID"], $arOldFields, $arFields, array('PROPS'), "BASKET");
}
foreach (GetModuleEvents("sale", "OnBasketUpdate", true) as $arEvent) {
ExecuteModuleEventEx($arEvent, array($ID, $arFields));
}
return true;
}
示例2: _Update
function _Update($ID, &$arFields)
{
global $DB;
$ID = (int)$ID;
//CSaleBasket::Init();
if (!CSaleBasket::CheckFields("UPDATE", $arFields, $ID))
return false;
foreach(GetModuleEvents("sale", "OnBeforeBasketUpdateAfterCheck", true) as $arEvent)
if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields))===false)
return false;
$arOldFields = CSaleBasket::GetByID($ID);
$strUpdate = $DB->PrepareUpdate("b_sale_basket", $arFields);
if(!empty($strUpdate))
{
$strSql = "update b_sale_basket set ".$strUpdate.", DATE_UPDATE = ".$DB->GetNowFunction()." where ID = ".$ID;
$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
}
if (isset($arFields["PROPS"]) && !empty($arFields["PROPS"]) && is_array($arFields["PROPS"]))
{
$sql = "delete from b_sale_basket_props where BASKET_ID = ".$ID;
$bProductXml = false;
$bCatalogXml = false;
foreach($arFields["PROPS"] as $prop)
{
if ($prop["CODE"] == "PRODUCT.XML_ID")
$bProductXml = true;
if ($prop["CODE"] == "CATALOG.XML_ID")
$bCatalogXml = true;
if ($bProductXml && $bCatalogXml)
break;
}
if (!$bProductXml)
$sql .= " and CODE <> 'PRODUCT.XML_ID'";
if (!$bCatalogXml)
$sql .= " and CODE <> 'CATALOG.XML_ID'";
$DB->Query($sql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
if (!$bProductXml || !$bCatalogXml)
{
$sql = "delete from b_sale_basket_props where BASKET_ID = ".$ID." and CODE IS NULL";
$DB->Query($sql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
}
foreach($arFields["PROPS"] as $prop)
{
if(strlen($prop["NAME"]) > 0)
{
$arInsert = $DB->PrepareInsert("b_sale_basket_props", $prop);
$strSql = "INSERT INTO b_sale_basket_props(BASKET_ID, ".$arInsert[0].") VALUES(".$ID.", ".$arInsert[1].")";
$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
}
}
}
if (isset($arFields["ORDER_ID"]) && (int)$arFields["ORDER_ID"] > 0)
CSaleOrderChange::AddRecordsByFields($arFields["ORDER_ID"], $arOldFields, $arFields, array(), "BASKET");
foreach(GetModuleEvents("sale", "OnBasketUpdate", true) as $arEvent)
ExecuteModuleEventEx($arEvent, Array($ID, $arFields));
return true;
}
示例3: Add
/**
* <p>Метод добавляет товар в корзину, если его ещё нет, и обновляет параметры товара с увеличением количества, если он уже находится в корзине. В массиве <b>arFields</b> перечисляются все параметры товара, которые нужны для работы модуля Интернет-магазина (т.е. этот модуль не зависит от других модулей и работает полностью самостоятельно). Метод динамичный.</p> <p>Интернет-магазин не зависит от других модулей, поэтому товары в корзину модуля продаж могут добавляться из любого места (например, из торгового каталога или со статической страницы). Для некоторых модулей существуют функции - оболочки, облегчающие добавление товара в корзину (например, для модуля <b>catalog</b> существуют функции <b>Add2Basket</b> и <b>Add2BasketByProductID</b>). </p>
*
*
* @param array $arFields Ассоциативный массив параметров элемента корзины, содержащий
* следующие ключи: <ul> <li> <b>PRODUCT_ID</b> - уникальный в рамках модуля код
* товара (обязательное поле);</li> <li> <b>PRODUCT_PRICE_ID</b> - ID (идентификатор)
* конкретного ценового предложения товара, пришедшего в корзину.
* Может быть использован в классе <a
* href="http://dev.1c-bitrix.ru/api_help/catalog/classes/cprice/index.php">CPrice</a> модуля Catalog для
* получения детальной информации о цене.</li> <li> <b> PRICE</b> - стоимость
* единицы товара (обязательное поле);</li> <li> <b>CURRENCY</b> - валюта
* стоимости единицы товара (обязательное поле), если валюта
* отличается от базовой валюты для данного сайта, то стоимость
* будет автоматически сконвертирована по текущему курсу;</li> <li>
* <b>WEIGHT</b> - вес единицы товара;</li> <li> <b>QUANTITY</b> - количество единиц
* товара;</li> <li> <b>LID</b> - сайт, на котором сделана покупка
* (обязательное поле);</li> <li> <b>DELAY</b> - флаг "товар отложен" (Y/N);</li> <li>
* <b>CAN_BUY</b> - флаг "товар можно купить" (Y/N) - может устанавливаться
* автоматически про наличии функции обратного вызова для
* поддержки актуальности корзины;</li> <li> <b>NAME</b> - название товара
* (обязательное поле);</li> <li> <b>PRODUCT_XML_ID</b> - внешний код товара
* (необходим при обмене заказами с 1С);</li> <li> <b>CATALOG_XML_ID</b> - внешний
* код каталога (необходим при обмене заказами с 1С);</li> <li> <b>ORDER_ID</b> -
* идентификатор заказа. Ключ будет пустым, если товар еще не
* добавлен в заказ;</li> <li> <b>CALLBACK_FUNC<font color="#FF0000">*</font></b> - название
* функции обратного вызова для поддержки актуальности корзины
* (описание ниже);</li> <li> <b>MODULE</b> - модуль, добавляющий товар в
* корзину;</li> <li> <b>NOTES</b> - особые заметки, например, тип цены;</li> <li>
* <b>ORDER_CALLBACK_FUNC<font color="#FF0000">*</font></b> - название функции обратного
* вызова для оформления заказа (описание ниже);</li> <li> <b>DETAIL_PAGE_URL</b> -
* ссылка на страницу детального просмотра товара;</li> <li>
* <b>CANCEL_CALLBACK_FUNC<font color="#FF0000">*</font></b> - название функции обратного
* вызова для отмены заказа (описание ниже);</li> <li> <b>PAY_CALLBACK_FUNC<font
* color="#FF0000">*</font></b> - название функции обратного вызова, которая
* вызывается при установке флага "Доставка разрешена" заказа;</li> <li>
* <b>FUSER_ID</b> - идентификатор пользователя интернет-магазина,
* необязательный параметр, по умолчанию CSaleBasket::GetBasketUserID() (текущий
* пользователь);</li> <li> <b>DISCOUNT_PRICE</b> - величина скидки;</li> <li>
* <b>DISCOUNT_NAME</b> - название скидки;</li> <li> <b>DISCOUNT_VALUE</b> - размер скидки (в
* процентах);</li> <li> <b>DISCOUNT_COUPON</b> - купон скидки;</li> <li> <b>PROPS</b> - массив
* свойств товара, который сохраняется в корзине. Каждый элемент
* этого массива является массивом следующего формата: <pre
* class="syntax"><code>array("NAME" => "Название свойства", "CODE" => "Код свойства",
* "VALUE" => "Значение свойства", "SORT" => "Индекс сортировки")</code></pre> </li>
* <li> <b>PRODUCT_PROVIDER_CLASS<font color="#0000FF">**</font></b> - содержит имя класса,
* реализующего интерфейс <b> IBXSaleProductProvider</b>. Торговый каталог
* записывает в это поле имя класса <b>CCatalogProductProvider</b>. Если поле
* пусто, то возникает попытка использовать старые поля:<b>CALLBACK_FUNC</b>,
* <b>ORDER_CALLBACK_FUNC</b>, <b>CANCEL_CALLBACK_FUNC</b> и <b>PAY_CALLBACK_FUNC</b>.</li> </ul>
*
* @return int <p>Метод возвращает код элемента корзины, в который попал данный
* товар.</p> <a name="examples"></a>
*
* <h4>Example</h4>
* <pre>
* <?<br>if (CModule::IncludeModule("sale"))<br>{<br> $arFields = array(<br> "PRODUCT_ID" => 51,<br> "PRODUCT_PRICE_ID" => 0,<br> "PRICE" => 138.54,<br> "CURRENCY" => "RUB",<br> "WEIGHT" => 530,<br> "QUANTITY" => 1,<br> "LID" => LANG,<br> "DELAY" => "N",<br> "CAN_BUY" => "Y",<br> "NAME" => "Чемодан кожаный",<br> "CALLBACK_FUNC" => "MyBasketCallback",<br> "MODULE" => "my_module",<br> "NOTES" => "",<br> "ORDER_CALLBACK_FUNC" => "MyBasketOrderCallback",<br> "DETAIL_PAGE_URL" => "/".LANG."/detail.php?ID=51"<br> );<br><br> $arProps = array();<br><br> $arProps[] = array(<br> "NAME" => "Цвет",<br> "CODE" => "color",<br> "VALUE" => "черный"<br> );<br><br> $arProps[] = array(<br> "NAME" => "Размер",<br> "VALUE" => "1.5 x 2.5"<br> );<br><br> $arFields["PROPS"] = $arProps;<br><br> CSaleBasket::Add($arFields);<br>}<br>?><br>
*
*
*
* //пример на проверку создания покупателя
*
* $userId=XXX;//id пользователя
* //получаем FUSER_ID, если покупатель для данного пользователя существует
* $FUSER_ID=CSaleUser::GetList(array('USER_ID' => $userId));
* //если покупателя нет - создаем его
* if(!$FUSER_ID['ID'])
* $FUSER_ID['ID']=CSaleUser::_Add(array("USER_ID" => $userId)); //обратите внимание на нижнее подчеркивание перед Add
* //если не получается создать покупателя - то тут уж ничего не поделаешь
* if(!$FUSER_ID['ID']){
* echo "Error while creating SaleUser";
* die();
* }
* $FUSER_ID=$FUSER_ID['ID'];
* //теперь переменную $FUSER_ID можно использовать для добавления товаров в корзину пользователя с $userId.
*
*
* Смотрите также:
*
* <li><a href="/api_help/catalog/interface.php">Взаимодействие торгового каталога и магазина</a></li>
* </pre>
*
*
* @static
* @link http://dev.1c-bitrix.ru/api_help/sale/classes/csalebasket/csalebasket__add.php
* @author Bitrix
*/
public static function Add($arFields)
{
global $DB, $APPLICATION;
if (isset($arFields["ID"])) {
unset($arFields["ID"]);
}
$isOrderConverted = \Bitrix\Main\Config\Option::get("main", "~sale_converted_15", 'N');
CSaleBasket::Init();
if (!CSaleBasket::CheckFields("ADD", $arFields)) {
return false;
}
if (!array_key_exists('IGNORE_CALLBACK_FUNC', $arFields) || 'Y' != $arFields['IGNORE_CALLBACK_FUNC']) {
if (array_key_exists("CALLBACK_FUNC", $arFields) && !empty($arFields["CALLBACK_FUNC"]) || array_key_exists("PRODUCT_PROVIDER_CLASS", $arFields) && !empty($arFields["PRODUCT_PROVIDER_CLASS"])) {
//.........这里部分代码省略.........
示例4: _Update
function _Update($ID, &$arFields)
{
global $DB;
$ID = IntVal($ID);
//CSaleBasket::Init();
if (!CSaleBasket::CheckFields("UPDATE", $arFields, $ID)) {
return false;
}
foreach (GetModuleEvents("sale", "OnBeforeBasketUpdateAfterCheck", true) as $arEvent) {
if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false) {
return false;
}
}
$strUpdate = $DB->PrepareUpdate("b_sale_basket", $arFields);
if (strlen($strUpdate) > 0) {
$strSql = "UPDATE b_sale_basket SET " . "\t" . $strUpdate . ", " . "\tDATE_UPDATE = " . $DB->GetNowFunction() . " " . "WHERE ID = " . $ID . " ";
$DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
}
if (is_array($arFields["PROPS"]) && count($arFields["PROPS"]) > 0) {
$sql = "DELETE FROM b_sale_basket_props WHERE BASKET_ID = " . $ID;
$bProductXml = false;
$bCatalogXml = false;
foreach ($arFields["PROPS"] as $prop) {
if ($prop["CODE"] == "PRODUCT.XML_ID") {
$bProductXml = true;
}
if ($prop["CODE"] == "CATALOG.XML_ID") {
$bCatalogXml = true;
}
if ($bProductXml && $bCatalogXml) {
break;
}
}
if (!$bProductXml) {
$sql .= " AND CODE <> 'PRODUCT.XML_ID'";
}
if (!$bCatalogXml) {
$sql .= " AND CODE <> 'CATALOG.XML_ID'";
}
$DB->Query($sql);
foreach ($arFields["PROPS"] as $prop) {
if (strlen($prop["NAME"]) > 0) {
$arInsert = $DB->PrepareInsert("b_sale_basket_props", $prop);
$strSql = "INSERT INTO b_sale_basket_props(BASKET_ID, " . $arInsert[0] . ") " . "VALUES(" . $ID . ", " . $arInsert[1] . ")";
$DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
}
}
}
foreach (GetModuleEvents("sale", "OnBasketUpdate", true) as $arEvent) {
ExecuteModuleEventEx($arEvent, array($ID, $arFields));
}
return True;
}
示例5: Add
/**
* <p>Функция добавляет товар в корзину, если его ещё нет, и обновляет параметры товара с увеличением количества, если он уже находится в корзине. В массиве <b>arFields</b> перечисляются все параметры товара, которые нужны для работы модуля Интернет-магазина (т.е. этот модуль не зависит от других модулей и работает полностью самостоятельно).</p> <p>Интернет-магазин не зависит от других модулей, поэтому товары в корзину модуля продаж могут добавляться из любого места (например, из торгового каталога или со статической страницы). Для некоторых модулей существуют функции - оболочки, облегчающие добавление товара в корзину (например, для модуля <b>catalog</b> существуют функции <b>Add2Basket</b> и <b>Add2BasketByProductID</b>). </p>
*
*
*
*
* @param array $arFields Ассоциативный массив параметров элемента корзины, содержащий
* следующие ключи: <ul> <li> <b>PRODUCT_ID</b> - уникальный в рамках модуля код
* товара (обязательное поле);</li> <li> <b>PRODUCT_PRICE_ID</b> - дополнительный
* код товара;</li> <li> <b> PRICE</b> - стоимость единицы товара (обязательное
* поле);</li> <li> <b>CURRENCY</b> - валюта стоимости единицы товара
* (обязательное поле), если валюта отличается от базовой валюты для
* данного сайта, то стоимость будет автоматически сконвертирована
* по текущему курсу;</li> <li> <b>WEIGHT</b> - вес единицы товара;</li> <li>
* <b>QUANTITY</b> - количество единиц товара;</li> <li> <b>LID</b> - сайт, на котором
* сделана покупка (обязательное поле);</li> <li> <b>DELAY</b> - флаг "товар
* отложен" (Y/N);</li> <li> <b>CAN_BUY</b> - флаг "товар можно купить" (Y/N) - может
* устанавливаться автоматически про наличии функции обратного
* вызова для поддержки актуальности корзины;</li> <li> <b>NAME</b> - название
* товара (обязательное поле);</li> <li> <b>CALLBACK_FUNC<font color="#FF0000">*</font></b> -
* название функции обратного вызова для поддержки актуальности
* корзины (описание ниже);</li> <li> <b>MODULE</b> - модуль, добавляющий товар в
* корзину;</li> <li> <b>NOTES</b> - особые заметки, например, тип цены;</li> <li>
* <b>ORDER_CALLBACK_FUNC<font color="#FF0000">*</font></b> - название функции обратного
* вызова для оформления заказа (описание ниже);</li> <li> <b>DETAIL_PAGE_URL</b> -
* ссылка на страницу детального просмотра товара;</li> <li>
* <b>CANCEL_CALLBACK_FUNC<font color="#FF0000">*</font></b> - название функции обратного
* вызова для отмены заказа (описание ниже);</li> <li> <b>PAY_CALLBACK_FUNC<font
* color="#FF0000">*</font></b> - название функции обратного вызова, которая
* вызывается при установке флага "Доставка разрешена" заказа;</li> <li>
* <b>FUSER_ID</b> - идентификатор пользователя интернет-магазина,
* необязательный параметр, по умолчанию CSaleBasket::GetBasketUserID() (текущий
* пользователь);</li> <li> <b>PROPS</b> - массив свойств товара, который
* сохраняется в корзине. Каждый элемент этого массива является
* массивом следующего формата: <pre class="syntax"><code>array("NAME" => "Название
* свойства", "CODE" => "Код свойства", "VALUE" => "Значение свойства", "SORT"
* => "Индекс сортировки")</code></pre> </li> <li> <b>PRODUCT_PROVIDER_CLASS<font
* color="#0000FF">**</font></b> - содержит имя класса, реализующего интерфейс <b>
* IBXSaleProductProvider</b>. Торговый каталог записывает в это поле имя класса
* <b>CCatalogProductProvider</b>. Если поле пусто, то возникает попытка
* использовать старые поля:<b>CALLBACK_FUNC</b>, <b>ORDER_CALLBACK_FUNC</b>,
* <b>CANCEL_CALLBACK_FUNC</b> и <b>PAY_CALLBACK_FUNC</b>.</li> </ul>
*
*
*
* @return int <p>Функция возвращает код элемента корзины, в который попал данный
* товар.</p><a name="examples"></a>
*
*
* <h4>Example</h4>
* <pre>
* <?<br>if (CModule::IncludeModule("sale"))<br>{<br> $arFields = array(<br> "PRODUCT_ID" => 51,<br> "PRODUCT_PRICE_ID" => 0,<br> "PRICE" => 138.54,<br> "CURRENCY" => "RUB",<br> "WEIGHT" => 530,<br> "QUANTITY" => 1,<br> "LID" => LANG,<br> "DELAY" => "N",<br> "CAN_BUY" => "Y",<br> "NAME" => "Чемодан кожаный",<br> "CALLBACK_FUNC" => "MyBasketCallback",<br> "MODULE" => "my_module",<br> "NOTES" => "",<br> "ORDER_CALLBACK_FUNC" => "MyBasketOrderCallback",<br> "DETAIL_PAGE_URL" => "/".LANG."/detail.php?ID=51"<br> );<br><br> $arProps = array();<br><br> $arProps[] = array(<br> "NAME" => "Цвет",<br> "CODE" => "color",<br> "VALUE" => "черный"<br> );<br><br> $arProps[] = array(<br> "NAME" => "Размер",<br> "VALUE" => "1.5 x 2.5"<br> );<br><br> $arFields["PROPS"] = $arProps;<br><br> CSaleBasket::Add($arFields);<br>}<br>?><br>
Смотрите также:
<li><a href="/api_help/catalog/interface.php">Взаимодействие торгового каталога и магазина</a></li>
* </pre>
*
*
* @static
* @link http://dev.1c-bitrix.ru/api_help/sale/classes/csalebasket/csalebasket__add.php
* @author Bitrix
*/
public static function Add($arFields)
{
global $DB;
if (isset($arFields["ID"]))
unset($arFields["ID"]);
CSaleBasket::Init();
if (!CSaleBasket::CheckFields("ADD", $arFields))
return false;
foreach(GetModuleEvents("sale", "OnBeforeBasketAdd", true) as $arEvent)
if (ExecuteModuleEventEx($arEvent, Array(&$arFields))===false)
return false;
$bFound = false;
$bEqAr = false;
$boolProps = (array_key_exists('PROPS', $arFields) && !empty($arFields["PROPS"]) && is_array($arFields["PROPS"]));
$db_res = CSaleBasket::GetList(
array(),
array(
"FUSER_ID" => $arFields["FUSER_ID"],
"PRODUCT_ID" => $arFields["PRODUCT_ID"],
"LID" => $arFields["LID"],
"ORDER_ID" => "NULL"
),
false,
false,
array("ID", "QUANTITY")
);
while($res = $db_res->Fetch())
{
if(!$bEqAr)
{
$arPropsCur = array();
$arPropsOld = array();
//.........这里部分代码省略.........