Bitrix php to js array

Битрикс. Аналоги стандартных PHP-функций

В Битрикс есть много аналогов стандартных функций php, которые, на первый взгляд, могут показаться излишними. Но, как правило, ничего не делается без причины, и все такие функции имеют какие-то важные отличия. Многие из них сделаны для обеспечения совместимости между серверами с различными настройками, в т.ч. для обеспечения безотказной работы в разных кодировках. И, если на рядовом сайте бывает проще и надежнее использовать стандартные функции, то при написании модулей их использование часто может спасти от серьезных ошибок на конфигурациях, отличных от вашей тестовой.

Функция htmlspecialchars()

\Bitrix\Main\Text\String::htmlEncode()

Функция htmlspecialchars() предназначена для преобразования специальных символов ( & , < , >, » ) в HTML-сущности ( & , < , > , " ). После этого эти спец.символы можно использовать в HTML-коде, они больше не будут иметь особого значения. С выходом PHP версии 5.4 изменилось значение по умолчанию третьего параметра. Дефолтным значением стала кодировка UTF-8.

Для Битрикс это стало проблемой по той причине, что если передавать строку с нелатинскими символами в иной кодировке, не передавая параметр кодировки, то функция возвращала пустую строку. Проблема ощутимая, т.к. в системе данная функция используется довольно часто. Поэтому была добавлена новая функция htmlspecialcharsbx() в главный модуль начиная с версии 11.5.9. Новая функция работает на основе все той же htmlspecialchars() :

function htmlspecialcharsbx($string, $flags = ENT_COMPAT) return htmlspecialchars($string, $flags, (defined("BX_UTF") ? "UTF-8" : "ISO-8859-1")); >
class String  public static function htmlEncode($string, $flags = ENT_COMPAT)  return htmlspecialchars($string, $flags, (defined("BX_UTF") ? "UTF-8" : "ISO-8859-1")); > >

Таким образом, если константа BX_UTF была определена перед обращением к функции, то будет использоваться кодировка UTF-8, в противном случае — ISO-8859-1.

Функции json_encode() и json_decode()

Функции json_encode() и json_decode() пребразуют массив PHP в строку json-формата и обратно, работают только с кодировкой UTF-8. Заставить их работать с кодировкой windows-1251 — не самая легкая задача. Методы Json::encode() и Json::decode() решают данную проблему. А т.к. сейчас большинство сайтов работают на технологии AJAX, при написании модулей они позволят отказаться от изобретения велосипеда.

Функции strtoupper() и strtolower()

Функции strtoupper() и strtolower() преобразуют строку к верхнему или нижнему регистру соответственно, но не работают с русским текстом в кодировке UTF-8. А функции Битрикс ToUpper() и ToLower() — работают.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

  • 1С:Предприятие (31)
  • API (29)
  • Bash (43)
  • CLI (99)
  • CMS (139)
  • CSS (50)
  • Frontend (75)
  • HTML (66)
  • JavaScript (150)
  • Laravel (72)
  • Linux (146)
  • MySQL (76)
  • PHP (125)
  • React.js (66)
  • SSH (27)
  • Ubuntu (68)
  • Web-разработка (509)
  • WordPress (73)
  • Yii2 (69)
  • БазаДанных (95)
  • Битрикс (66)
  • Блог (29)
  • Верстка (43)
  • ИнтернетМагаз… (84)
  • КаталогТоваров (87)
  • Класс (30)
  • Клиент (27)
  • Ключ (28)
  • Команда (68)
  • Компонент (60)
  • Конфигурация (62)
  • Корзина (32)
  • ЛокальнаяСеть (28)
  • Модуль (34)
  • Навигация (31)
  • Настройка (140)
  • ПанельУправле… (29)
  • Плагин (33)
  • Пользователь (26)
  • Практика (99)
  • Сервер (74)
  • Событие (27)
  • Теория (105)
  • Установка (66)
  • Файл (47)
  • Форма (58)
  • Фреймворк (192)
  • Функция (36)
  • ШаблонСайта (68)

Источник

Используем JS код с PHP в собственных шаблонах веб форм.

Иногда требуется внести данные в поля веб формы из других источников, из сессии, из глобальных переменных, из параметров переданных на страницу, из произвольного кода. И все это можно сделать не кастомизируя шаблон компонента.
Во первых нужно правильно подключить наш файл скрипта в шаблоне веб формы.

686_forma_zayavki_54_229_163_199_services_requests_form_php_web_form_id_it_troubleshooting_s1.png

Во вторых весь требуемый нам js и php код будем реализовывать в подключенном файле. Не нужно не каких дополнительных запросов для получения данных о веб форме, вопросах и полях делать не нужно они уже все есть в объекте, по этому наш скрипт начнем с формирования нескольких объектов.

  var arParams = ; var arForm = ; var arQuestions = ; var arAnswers = ; var arDropDown = ; var arMultiSelect = ;

Поиск конкретного поля для указания его значения следует использовать правила формирования имен HTML полей веб-форм ( http://dev.1c-bitrix.ru/api_help/form. lnames.php ).

Вот пример кода формирования для поля с типом текст.

function SetValue(Question,value) < switch (arQuestions[Question].TITLE_TYPE) < case 'text': //form_text_answer_id for(var index in arAnswers[Question]) < document.getElementsByName('form_'+arQuestions[Question].TITLE_TYPE+'_'+arAnswers[Question][index].ID)[0].value = value; >break; case 'textarea': //form_textarea_answer_id break; case 'password': //form_password_answer_id break; case 'date': //form_date_answer_id break; case 'radio': //form_radio_question_sid break; case 'dropdown': //form_dropdown_question_sid break; case 'checkbox': //form_checkbox_question_sid[] break; case 'multiselect': //form_multiselect_question_sid[] break; case 'hidden': //form_hidden_answer_id break; > > 

Источник

Как перенести данные из файла php в файл js?

Поясняю, создаю массив с данными → с помощью json_encode перевожу его в json представление, чтобы в дальнейшем с этим массивом можно было работать в js → создаю объект «ourJs» и помещаю в него данный массив.

Далее получаю данные массива в script.js, и тут момент, console.log(test) в теле функции выдает значение PATH_TO_TEMPLATE = /bitrix/component/catalog.element/test/, console.log(test) вне тела функции выдает PATH_TO_TEMPLATE = undefiend.

Вопросы:
1. Как получить значения вне тела функции? В Jq слаб, обучение в процессе, застрял на этом вопросе.
2. Если способ описанный выше кажется вам с какой-нибудь точки зрения не правильным, буду рад другим

Простой 4 комментария

just_guy95

Можно подробнее пожалуйста, потому что мне не понятно какое отношение имеет html к данному вопросу? Про вывод данных в публичную часть речи не было!

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

just_guy95

Вячеслав Шабунин, хорошо, начну с того, что используется Bitrix, и компонент отвечающий за вывод детальной страницы товара.
В шаблоне компонента присутствуют 2 вышесказанных файла template.php(шаблон товара) и script.js(js и jq скрипты), дело в том, что в template.php есть переменная которая хранит в себе путь к шаблону компонента, этот путь мне нужен для $.ajax т.к. в этой папке находится server.php на который будет отправляться запрос.
Почему я просто инлайново не впишу путь? Дело в том, что в битриксе есть возможность использовать компоненты из разных пространств имен, например:
1. Я вписал в url $.ajax /bitrix/component/catalog.element/test/ считая, что он там будет до скончания времен.
2. А другой разработчик который будет что-то делать после меня возьмет и перенесет данный компонент в local и по факту путь в $.ajax необходимо будет поменять на /local/component/catalog.element/test/, но он то этого не знает.
Значение переменной в которой хранится путь генерируется автоматически в зависимости от того, в каком пространстве имен находится компонент или шаблон компонента.

Источник

Как передать в Ajax запросе массив текущего элемента сформированного методом PhpToJSObject?

Привет знатоки!
Кто подскажет как передать массив текущего элемента в Ajax запросе. Можно сделать проще и запихать скрипт в цикл foreach, но хочется ограничиться скриптом за пределами цикла. Пробовал также запихать этот массив в скрытый инпут с присвоением id=»item_», и получать его скажем так:

var // Берется из id кликнутого элемента var ITEM = $('#item_' + ID); // Собственно сам скрытый инпут с подстановкой полученного id

По идее все (правильно). Но почему то сформированный массив игнорирует то, что инпут скрытый и выводится на странице. В данный момент сделал следующее:
Преобразуем PHP массив в JS

$rsItemJS = array( "ID" => $arItem["ID"], "NAME" => $arItem["NAME"], "PROPERTIES" => $arItem["PROPERTIES"] ); $arItemJS = CUtil::PhpToJSObject($rsItemJS);

Далее в JS скрипте надо передать этот массив! Элементов может быть много, как передать именно тот, на который был сделан клик?

$(document).ready(function ($) < $('.item').on('click', function () < var ITEM = ; var AjaxSelectItem = ; ajaxrequest('/include/popup.modal.php', AjaxSelectItem , ' .modal-body'); return false; >); >);
function ajaxrequest(url, param, content) < $.ajax(< type: "POST", url: url, data: param, success: function (response) < $(content).html(response); >>); >

Источник

Передача динамического массива объектов php в JS

Fezas вне форума

Попросили доделать в bitrix страницу услуг которых около 200($elements). Решение выбрал «ленивой подгрузки». Реализацию выбрал isotope + infinite scroll. И получилось так что тяму не хватает как передать блок (элемент массива создаваемый скриптом php на лету:

\"

$file = fopen ( ‘dump.txt’ , ‘w’ );
$ElemHTML []= «» ;
foreach ( $elements as $arElement )
$res = CIBlockElement :: GetByID ( $arElement [ «PROPERTY_PRIMER» ]);
$primer = $res -> GetNext ();
if(!empty( $primer )) $codeid = » » . $primer [ ‘CODE’ ];
$arElementID = $arElement [ «ID» ];
$arElementSRC = $arElement [ «DETAIL_PIC» ][ «SRC» ];
$arElementNAME = $arElement [ «NAME» ];
$arElementSCR = $arElement [ «PREVIEW_PIC» ][ «src» ];
$arElementTEXT = $arElement [ «PREVIEW_TEXT» ];
array_push ( $ElemHTML , » $arElementID \» $codeid \»>

$arElementNAME
$arElementTEXT

» );
> //foreach ($elements as $arElement).
array_shift ( $ElemHTML );
$result = implode ( ‘,’ , $ElemHTML );
fwrite ( $file , $result );
fclose ( $file );

в JS с учетом конечно же того что вначале должен выполняться JS над готовым массивом ( а ведь он еще не создан средствами php).

brainix вне форума

Sapienti sat

  • Регистрация: 01.01.2013
  • Сообщений: 1,925
  • Записей в дневнике: 1
  • Репутация: 817
  • Webmoney BL: ?

Вначале js, а потом php на одной странице так не получится. Есть вариант по аяксу данные подтянуть разве что.

Fezas вне форума

header ( ‘Content-Type: application/x-javascript; charset=utf8’ );
$ElemHTML =array();
foreach ( $elements as $arElement )
$res = CIBlockElement :: GetByID ( $arElement [ «PROPERTY_PRIMER» ]);
$primer = $res -> GetNext ();
if(!empty( $primer )) $codeid = » » . $primer [ ‘CODE’ ];
$arElementID = $arElement [ «ID» ];
$arElementSRC = $arElement [ «DETAIL_PIC» ][ «SRC» ];
$arElementNAME = $arElement [ «NAME» ];
$arElementSCR = $arElement [ «PREVIEW_PIC» ][ «src» ];
$arElementTEXT = $arElement [ «PREVIEW_TEXT» ];
$Block = ‘ . $arElementID . ‘ class color: #007700″>. $codeid . ‘>. $arElementSRC . ‘ rel=»group» title color: #007700″>. $arElementNAME . ‘»>. $arElementID . ‘» alt color: #007700″>. $arElementNAME . ‘» src color: #007700″>. $arElementSCR . ‘»/>

‘ . $arElementNAME . ‘
‘ . $arElementTEXT . ‘

‘ ;
array_push ( $ElemHTML , $Block );

> //foreach ($elements as $arElement).
$Elem = json_encode ( $ElemHTML );
$result = implode ( ‘,’ , $ElemHTML );
$file = fopen ( ‘dump.txt’ , ‘w’ );
fwrite ( $file , $result );
fclose ( $file );
?>

Дает var name = [null,null,null,null,null,null,null,null,null,null, null,null,null,null,null,null,null,null,null,null, null,null,null,null,null,null,null,null,null,null, null,null,null,null,null,null,null,null,null,null, null,null,null,null,null,null,null,null,null,null, null,null,null,null,null,null,null,null,null,null, null,null,null,null,null,null,null,null,null,null, null,null,null,null,null,null,null,null,null,null, null,null,null,null,null,null,null];

Что не так не пойму. в дампе весь массив в порядке.

Источник

Читайте также:  Javascript чтение файла csv
Оцените статью