• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела wpt лично.

Шорткоды для битрикса

Удачная альтернатива print_r
После установки нужно подключить файл nf_pp.php
PHP:
include 'nf_pp.php';
и можно пользоваться pp($array);
Скрытое содержимое доступно для зарегистрированных пользователей!
 
У меня всегда наготове есть такой файл с этим кодом, который служит как гарант сделки.
Если что-то пойдет не так, можно зайти на сайт под админом и вернуть всё что сделано непосильным трудом.

вот именно по этому я никогда ни пускаю подобных тебе на сайт, только дамп, полное комментирование доработок и перенос непосредственно того что нужно

как показывает практика сколько подобным тебе не плати все мало
 
вот именно по этому я никогда ни пускаю подобных тебе на сайт, только дамп, полное комментирование доработок и перенос непосредственно того что нужно
как показывает практика сколько подобным тебе не плати все мало
Не пускай никого в свою комнату,
Зачем тебе темные гости?
Будут тянуть тебя к омуту,
По углам разбросают кости.

Загадят паркет твой чистый,
Изомнут на стуле рубашку,
Поломают торшер лучистый,
Наплюют в любимую чашку.

Зайдут на сайт твой любимый,
Затрут всю порнуху начисто,
И подкрадется тенью размытой,
Удушливое одиночество.
 
Последнее редактирование:
Кратенькое решение набросал сегодня, думаю многим будет полезно.

В /include/calc.php
PHP:
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");

function getAllPecomCities()
{
    global $APPLICATION;
    $data = array();
    $cacheId = "SaleDeliveryPecomCities";

    if(empty($data))
    {
        $http = new \Bitrix\Main\Web\HttpClient(array(
            "version" => "1.1",
            "socketTimeout" => 30,
            "streamTimeout" => 30,
            "redirect" => true,
            "redirectMax" => 5,
        ));

        $jsnData = $http->get("http://www.pecom.ru/ru/calc/towns.php");
        $errors = $http->getError();

        if (!$jsnData && !empty($errors))
        {
            $strError = "";

            foreach($errors as $errorCode => $errMes)
                $strError .= $errorCode.": ".$errMes;

            \CEventLog::Add(array("SEVERITY" => "ERROR", "AUDIT_TYPE_ID" => "SALE_DELIVERY", "MODULE_ID" => "sale",     "ITEM_ID" => "PECOM_GET_TOWNS", "DESCRIPTION" => $strError,));
        }

        $data = json_decode($jsnData, true);

        if(strtolower(SITE_CHARSET) != 'utf-8')
        {
            $data = $APPLICATION->ConvertCharsetArray($data, 'utf-8', SITE_CHARSET);
            if(is_array($data))
            {
                foreach($data as $key => $value)
                {
                    $newKey = $APPLICATION->ConvertCharset($key, 'utf-8', SITE_CHARSET);
                    $data[$newKey] = $value;
                    unset($data[$key]);
                }
            }
        }

        if(!is_array($data))
            $data = array();

    }

    return $data;
}
function mapLocation($locationId)
{
    $cityName = getCityNameFromLocationId($locationId);

    if(!$cityName)
        return array();

    $data = array();

    if(empty($data))
    {
        $pecCities = getAllPecomCities();
        $data = array();

        foreach($pecCities as $key => $cities)
        {
            foreach($cities as $smallCityKey => $smallCityName)
            {
                $pos = strpos($smallCityName, $cityName);
                if($pos !== false && (strlen($cityName) == strlen($smallCityName) || (substr($smallCityName,$pos+strlen($cityName), 1) == " " && ($pos == 0 || substr($smallCityName,$pos-1, 1) == " "))    ))
                {
                    $data[$smallCityKey] = $smallCityName;
                }
            }
        }
    }

    return $data;
}

function getCityNameFromLocationId($locationId)
{
     $loc = \CSaleLocation::GetById($locationId);
     return isset($loc["CITY_NAME_LANG"]) ? $loc["CITY_NAME_LANG"] : false;
}

function createCalcParams($location, $width, $lenght, $height, $weight)
{
    $i=0;
    $locationTo = "";
    $arLocation = mapLocation($location);

    if(count($arLocation) == 1)
    {
        $locationTo = key($arLocation);
    }

    $volume=($lenght/1000)*($width/1000)*($height/1000);

    $volume=number_format($volume, 2, '.', '');

    $itemsStr .= 'places['.$i.'][]='.strval($width/1000).
        '&places['.$i.'][]='.strval($lenght/1000).
        '&places['.$i.'][]='.strval($height/1000).
        '&places['.$i.'][]='.strval($volume).
        '&places['.$i.'][]='.strval($weight/1000).
        '&places['.$i.'][]=0'.
        '&places['.$i.'][]=0';

    $insurance = "0";

    $result = $itemsStr.
        '&take[town]=-446'.//$this->arConfig["CITY_DELIVERY"]["VALUE"].
        '&take[tent]=0'.
        '&take[gidro]=0'.
        '&take[speed]=0'.
        '&take[moscow]=0'.
        '&deliver[town]='.$locationTo.
        '&deliver[tent]=0'.
        '&delideliver[gidro]=0'.
        '&deliver[speed]=0'.
        '&deliver[moscow]=0'.
        '&plombir=0'.
        '&strah='.$insurance.
        '&ashan=0';

    return $result;
}

function send($strParams)
{
    $http = new \Bitrix\Main\Web\HttpClient(array(
        "version" => "1.1",
        "socketTimeout" => 30,
        "streamTimeout" => 30,
        "redirect" => true,
        "redirectMax" => 5,
    ));

    $jsnData = $http->post("http://www.pecom.ru/bitrix/components/pecom/calc/ajax.php", $strParams);
    $errors = $http->getError();

    if (!$jsnData && !empty($errors))
    {
        $strError = "";

        foreach($errors as $errorCode => $errMes)
            $strError .= $errorCode.": ".$errMes;

        \CEventLog::Add(array(
            "SEVERITY" => "ERROR",
            "AUDIT_TYPE_ID" => "SALE_DELIVERY",
            "MODULE_ID" => "sale",
            "ITEM_ID" => "PECOM_CALCULATOR_SEND",
            "DESCRIPTION" => $strError,
        ));
    }

    return $jsnData;
}

function parseCalcResult($jsonInfo)
{
    global $APPLICATION;
    $arInfo = json_decode($jsonInfo,true);

    if(is_array($arInfo) && !empty($arInfo))
    {
        if(isset($arInfo["auto"][2]))
        {
            $price = 0;

            $price += intval($arInfo["auto"][2]);

            //if(isset($arInfo["take"][2]) && \CDeliveryPecom::isConfCheckedVal($this->arConfig, 'SERVICE_TAKE_ENABLED'))
            //    $price += intval($arInfo["take"][2]);


            //if(isset($arInfo["deliver"][2]) && \CDeliveryPecom::isConfCheckedVal($this->arConfig, 'SERVICE_TAKE_ENABLED'))
            //    $price += intval($arInfo["deliver"][2]);

            foreach($arInfo as $key => $value)
                if(substr($key,0,3) == "ADD")
                    $price += intval($arInfo[$key][2]);

            $arResult = array(
                'RESULT' => 'OK',
                'VALUE' => $price,
            );

            if(isset($arInfo["periods"]))
            {
                $str = explode("<br>", $arInfo["periods"]);

                if(isset($str[0]))
                {
                    $days = explode(":",$str[0]);

                    if(isset($days[2]) && strlen($days[2]) > 0)
                        $arResult["TRANSIT"] = $days[2];
                }
            }
        }
        else
        {
            if(isset($arInfo["error"]))
            {
                $error = implode("<br>", $arInfo["error"]);

                if(strtolower(SITE_CHARSET) != 'utf-8')
                    $error = $APPLICATION->ConvertCharset($error, 'utf-8', SITE_CHARSET);
            }
            else
            {
                $error = GetMessage("SALE_DH_PECOM_ERROR");
            }

            $arResult = array(
                'RESULT' => 'ERROR',
                'TEXT' => $error
            );
        }
    }
    else
    {
        $arResult = array(
            'RESULT' => 'ERROR',
            'TEXT' => GetMessage("SALE_DH_PECOM_ERROR_NO_RESULTS")
        );
    }

    return $arResult;
}

$res=createCalcParams($_REQUEST["loc"], $_REQUEST["w"], $_REQUEST["h"], $_REQUEST["h"], $_REQUEST["ww"]);
$data=send($res);
$result=parseCalcResult($data);
?>
ТК ПЭК: <b><?=$result["VALUE"];?> р.</b>

В карточку товара
PHP:
<?$APPLICATION->IncludeComponent(
    "bitrix:sale.ajax.locations",
    "popup",
    Array(
        "AJAX_CALL" => "N",
        "ALLOW_EMPTY_CITY" => $_REQUEST["ALLOW_EMPTY_CITY"],
        "CITY_INPUT_NAME" => "CITY_INPUT",
        "CITY_OUT_LOCATION" => $_REQUEST["CITY_OUT_LOCATION"],
        "COUNTRY" => intval($_REQUEST["COUNTRY"]),
        "COUNTRY_INPUT_NAME" => "COUNTRY_INPUT",
        "ONCITYCHANGE" => "calculate();",
        "REGION" => intval($_REQUEST["REGION"]),
        "REGION_INPUT_NAME" => "REGION_INPUT",
        "ZIPCODE" => "ZIP_INPUT"
    ),
    null,
    Array(
        'HIDE_ICONS' => 'Y'
    )
);
?>
<div id="calc_result"><img src="/images/21.gif" id="load_gif" style="display: none;" /></div>
<script>
var w='<?=$arResult["CATALOG_WIDTH"]?>';
var h='<?=$arResult["CATALOG_HEIGHT"]?>';
var l='<?=$arResult["CATALOG_LENGTH"]?>';
var ww='<?=$arResult["CATALOG_WEIGHT"]?>';
function calculate() {
    var location=$("#CITY_INPUT").val();
    $("#load_gif").show();
    $.get("/include/calc.php", "loc="+location+"&w="+w+"&h="+h+"&l="+l+"&ww="+ww, function (result) {
        $("#calc_result").html(result);
    });
}
</script>

Создаем файлик /bitrix/php_interface/admin_header.php

В примере код файлика используется для выбора автоматом местоположения при создании заказа из админки и добавление 4х кнопок с разными задачами в списке заказов
PHP:
<script>
function setRegion() {
    $("select[name=REGION_ORDER_PROP_5CITY_ORDER_PROP_5]").find('option[value=50]').attr("selected", "selected");
    $("select[name=REGION_ORDER_PROP_5CITY_ORDER_PROP_5]").change();
}
function setCity() {
    $("#CITY_ORDER_PROP_5").find('option[value=672]').attr("selected", "selected");
    $("#CITY_ORDER_PROP_5").change();
}
$(document).ready(function(){
<?
if($APPLICATION->GetCurPage()=="/bitrix/admin/sale_order.php"):
?>


    $("#adm-title").after('<a href="orders_to_excel.php" style="display: inline-block; margin-right: 20px; margin-bottom: 20px; width: 150px;" class="adm-btn adm-btn-save" title="Выгрузить заказы в форму">Эксель для курьеров</a>');
    $("#adm-title").after('<a href="orders_onmap.php" style="display: inline-block; margin-right: 20px; margin-bottom: 20px; width: 150px;" class="adm-btn adm-btn-save" title="Заказы на карте">Заказы на карте</a>');
    $("#adm-title").after('<a href="orders_print.php" style="display: inline-block; margin-right: 20px; margin-bottom: 20px; width: 150px;" class="adm-btn adm-btn-save" title="Печать заказов">Печать заказов</a>');
    $("#adm-title").after('<a href="orders_stiker.php" style="display: inline-block; margin-right: 20px; margin-bottom: 20px; width: 150px;" class="adm-btn adm-btn-save" title="Печать заказов">Печать этикеток</a>');

<?endif;?>
<?
if($APPLICATION->GetCurPage()=="/bitrix/admin/order_new_new.php"):
?>
    $("#ORDER_PROP_5CITY_ORDER_PROP_5").find('option[value=5]').attr("selected", "selected");
    $("#ORDER_PROP_5CITY_ORDER_PROP_5").change();
    setTimeout('setRegion()',500);
    setTimeout('setCity()',1000);
<?endif;?>
    $("div.base_price_title").hide();
});
</script>
 
Последнее редактирование:
Все любят использовать компонент search.title на сайте для быстрого поиска.
Но по дефолту он ищет только по названию элемента, а часто нужно искать еще и по характеристикам например бренду или артикулу или размеру/цвету/вкусу и тд.

Не забываем сделать после вставки кода переиндексацию поиска.
PHP:
AddEventHandler("search", "BeforeIndex", "BeforeIndexHandler");

function BeforeIndexHandler($arFields)
{
if(!CModule::IncludeModule("iblock")) // подключаем модуль
return $arFields;
if($arFields["MODULE_ID"] == "iblock")
{

$path=Array();
$title="";
$res = CIBlockElement::GetByID($arFields["ITEM_ID"]);
if($ob = $res->GetNextElement())
{
$prop=$ob->GetProperties();
}


$db_props = CIBlockElement::GetProperty( // Запросим свойства индексируемого элемента
$arFields["PARAM2"], // BLOCK_ID индексируемого свойства
$arFields["ITEM_ID"], // ID индексируемого свойства
array("sort" => "asc"), // Сортировка (можно упустить)
Array("CODE"=>"ARTICLE")); // CODE свойства (в данном случае артикул)

if($ar_props = $db_props->Fetch())
{
$arFields["TITLE"] = $arFields["TITLE"]." ".$prop["CML2_ATTRIBUTES"]["VALUE"][0]." ".$ar_props["VALUE"];
$arFields["BODY"] = "";
}

}
return $arFields; // вернём изменения
}
 
Последнее редактирование:
Кратенькое решение набросал сегодня, думаю многим будет полезно.
Создаем файлик /bitrix/php_interface/admin_header.php

В примере код файлика используется для выбора автоматом местоположения при создании заказа из админки и добавление 4х кнопок с разными задачами в списке заказов
PHP:
<script>
function setRegion() {
    $("select[name=REGION_ORDER_PROP_5CITY_ORDER_PROP_5]").find('option[value=50]').attr("selected", "selected");
    $("select[name=REGION_ORDER_PROP_5CITY_ORDER_PROP_5]").change();
}
function setCity() {
    $("#CITY_ORDER_PROP_5").find('option[value=672]').attr("selected", "selected");
    $("#CITY_ORDER_PROP_5").change();
}
$(document).ready(function(){
<?
if($APPLICATION->GetCurPage()=="/bitrix/admin/sale_order.php"):
?>


    $("#adm-title").after('<a href="orders_to_excel.php" style="display: inline-block; margin-right: 20px; margin-bottom: 20px; width: 150px;" class="adm-btn adm-btn-save" title="Выгрузить заказы в форму">Эксель для курьеров</a>');
    $("#adm-title").after('<a href="orders_onmap.php" style="display: inline-block; margin-right: 20px; margin-bottom: 20px; width: 150px;" class="adm-btn adm-btn-save" title="Заказы на карте">Заказы на карте</a>');
    $("#adm-title").after('<a href="orders_print.php" style="display: inline-block; margin-right: 20px; margin-bottom: 20px; width: 150px;" class="adm-btn adm-btn-save" title="Печать заказов">Печать заказов</a>');
    $("#adm-title").after('<a href="orders_stiker.php" style="display: inline-block; margin-right: 20px; margin-bottom: 20px; width: 150px;" class="adm-btn adm-btn-save" title="Печать заказов">Печать этикеток</a>');

<?endif;?>
<?
if($APPLICATION->GetCurPage()=="/bitrix/admin/order_new_new.php"):
?>
    $("#ORDER_PROP_5CITY_ORDER_PROP_5").find('option[value=5]').attr("selected", "selected");
    $("#ORDER_PROP_5CITY_ORDER_PROP_5").change();
    setTimeout('setRegion()',500);
    setTimeout('setCity()',1000);
<?endif;?>
    $("div.base_price_title").hide();
});
</script>
Вопрос - нужно ли этот файл подключать куда-нибудь? Залил его, очистил кэш, а ничего в админке не изменилось...
 
Вопрос - нужно ли этот файл подключать куда-нибудь? Залил его, очистил кэш, а ничего в админке не изменилось...

Подключать не нужно, главное чтоб лежал в нужной папке. Ну и пути в файлике должны быть вам нужные. Так же стоит проверить ошибки в консоле.
 
Реанимирую тему....
Вот в кой то веке понадобилось полезная штука

PHP:
<?php
$GLOBALS["DB"]->ShowSqlStat = true;
$application = \Bitrix\Main\Application::getInstance();
$connection  = $application->getConnection();
$connection->startTracker();
$sqlTracker = $connection->getTracker();

//CIBlockElement::GetList() Или еще какой то свой код c sql запросами сюда

var_dump($sqlTracker->getQueries());
$connection->stopTracker();
$GLOBALS["DB"]->ShowSqlStat = false;
?>
 
Назад
Сверху