\Bitrix\Main\XmlWriter
, то с его помощью - никак.class AppXmlWriter extends XmlWriter
{
private $file = '';
private $charset = '';
private $tab = 0;
private $f = null;
private $lowercaseTag = false;
private $errors = array();
// конструктор скопирован, т.к. там все private
public function __construct(array $params)
{
if (isset($params['file']))
{
$server = \Bitrix\Main\Application::getInstance()->getContext()->getServer();
$this->file = $server->getDocumentRoot() . trim($params['file']);
// create new file
if (
isset($params['create_file']) &&
$params['create_file'] === true &&
is_writable($this->file)
)
{
unlink($this->file);
}
}
if (isset($params['charset']))
{
$this->charset = trim($params['charset']);
}
else
{
$this->charset = SITE_CHARSET;
}
if (isset($params['lowercase']) && $params['lowercase'] === true)
{
$this->lowercaseTag = true;
}
if (isset($params['tab']))
{
$this->tab = (int)$params['tab'];
}
}
public function prepareAttributes(array $attributes): string
{
$result = '';
if (empty($attributes)) {
return $result;
}
foreach ($attributes as $key => $value) {
$result .= sprintf(' %s="%s"', $key, $value);
}
return $result;
}
public function writeBeginTag($code, array $attributes = [])
{
if (!$this->f) {
return;
}
fwrite($this->f, str_repeat("\t", $this->tab) . '<' . $this->prepareTag($code) . $this->prepareAttributes($attributes) . '>' . PHP_EOL);
$this->tab++;
}
public function writeFullTag($code, $value, array $attributes = [])
{
if (!$this->f) {
return;
}
$code = $this->prepareTag($code);
$codeAttributes = $this->prepareAttributes($attributes);
fwrite($this->f,
str_repeat("\t", $this->tab) .
(
trim($value) == ''
? '<' . $code . $codeAttributes . ' />' . PHP_EOL
: '<' . $code . $codeAttributes . '>' .
$this->prepareValue($value) .
'</' . $code . '>' . PHP_EOL
)
);
}
}
у меня есть страница брендов, и мне нужно вывести разделы в котором они находятся
bitrix:catalog.section.list
, используя фильтр по разделам, полученный на предыдущем шаге. <?
$productsAmount = [];
$rsStoreProduct = \Bitrix\Catalog\StoreProductTable::getList(array(
'filter' => array('PRODUCT_ID' => $arData, 'STORE_ID' => array(31, 33)),
'select' => array('PRODUCT_ID', 'AMOUNT', 'STORE_ID', 'STORE_TITLE' => 'STORE.TITLE', 'PRODUCT_NAME' => 'PRODUCT.IBLOCK_ELEMENT.NAME'),
));
while ($arStoreProduct = $rsStoreProduct->fetch()) {
if (is_null($productsAmount[$arStoreProduct["PRODUCT_ID"]])) {
$productsAmount[$arStoreProduct["PRODUCT_ID"]] = 0;
}
$productsAmount[$arStoreProduct["PRODUCT_ID"]] += $arStoreProduct["AMOUNT"]
}
return array_search(0, $productsAmount) === false;
<?php
header('Content-Type: application/json; charset=UTF-8');
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
$authKey = '********************';
$oauthClientId = '****************';
$requestURL = 'https://api.partner.market.yandex.ru/v2/campaigns/21614343/hidden-offers.json';
$data = array(
'hiddenOffers' => array(
array(
'offerId' => 146688,
'comment' => 'clear markret',
'ttlInHours' => 720
)
),
);
$data_string = json_encode($data);
$result = file_get_contents($requestURL, null, stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => array(
"Authorization: OAuth oauth_token=$authKey, oauth_client_id=$oauthClientId\r\n" .
"Content-Type: application/json; charset=utf-8\r\n" .
"Content-Length: " . strlen($data_string) . "\r\n" .
"Host: " . parse_url($requestURL)['host']
),
'content' => $data_string
)
)
)
);
echo $result;
<script type="text/javascript">
<?=$cartId?>.activate();
</script>
/** Montserrat Light **/
@font-face {
font-family: "Montserrat";
font-weight: 300;
font-style: normal;
src: url("../fonts/Montserrat-Light.woff2") format("woff2"),
url("../fonts/Montserrat-Light.woff") format("woff");
}
/** Montserrat Medium **/
@font-face {
font-family: "Montserrat";
font-weight: 500;
font-style: normal;
src: url("../fonts/Montserrat-Medium.woff2") format("woff2"),
url("../fonts/Montserrat-Medium.woff") format("woff");
}
/** Montserrat SemiBold **/
@font-face {
font-family: "Montserrat";
font-weight: 600;
font-style: normal;
src: url("../fonts/Montserrat-SemiBold.woff2") format("woff2"),
url("../fonts/Montserrat-SemiBold.woff") format("woff");
}
/** Montserrat Bold **/
@font-face {
font-family: "Montserrat";
font-weight: 700;
font-style: normal;
src: url("../fonts/Montserrat-Bold.woff2") format("woff2"),
url("../fonts/Montserrat-Bold.woff") format("woff");
}
<?php
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'sale',
'OnSaleAdminOrderList',
'OnSaleAdminOrderListHandler'
);
function OnSaleAdminOrderListHandler(\Bitrix\Main\Event $event)
{
$getListParams = $event->getParameters();
$reailManagerGroupId = 1; //ID группы менеджеров розницы
$wholesaleManagerGroupId = 2; //ID группы менеджеров оптовиков
$optUserGroup = 3; //ID группы оптовых покупателей
$reatilUserGroup = 4; //ID группы розничных покупателей
global $USER;
$userGroups = \CUser::GetUserGroup($USER);
if (in_array($reailManagerGroupId, $userGroups)) {
$getListParams["filter"]["USER_GROUP.GROUP_ID"] = $reatilUserGroup;
} else if(in_array($wholesaleManagerGroupId, $userGroups)) {
$getListParams["filter"]["USER_GROUP.GROUP_ID"] = $optUserGroup;
}
$result = new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $getListParams);
return $result;
}
Subscription::subscribe
? Я думаю если бы пробовали, то увидели бы что там принимается только EMAIL в качестве идентфикатора, а далее ищется или создается контакт через класс ContactTable в котором как раз можно указать имя (после добавления подписки). init: function()
{
// ................
if (!this.obPict)
{
this.errorCode = -2;
}
// ................
if (!this.obPictSlider)
{
this.errorCode = -4;
}
// ................
if (this.errorCode === 0)
{
// здесь все инициализируется, добавление в корзину в том числе
OnBeforeIBlockElementUpdate
или OnBeforeProductAdd
. В обработчике, чтобы определить, что событие вызвано именно во время обмена с 1С, можно использовать такое костыльное условие:if (isset($_GET['type'], $_GET['mode']) && $_GET['type'] === 'catalog' && $_GET['mode'] === 'import') {
// ...
}
BX.ajax({
url: '<?=\CUtil::jsEscape(SITE_TEMPLATE_PATH)?>/ajax/addtobasket.php',
method: 'POST',
data: {"id": idElements, "count": countElements},
dataType: 'json',
async: true,
onsuccess: BX.delegate(function (response) {
}, this),
onfailure: BX.delegate(function () {
}, this)
});
$request = \Bitrix\Main\HttpApplication::getInstance()->getContext()->getRequest();
if($request->isPost() && isset($request['id']) && isset($request['count'])) {
}
Вот стоит ли вообще туда совать свой нос? Как поступить?
простую crm систему