Пользовательские поля в шаблонах документов
В Битрикс24 вы можете использовать пользовательские поля в шаблонах документов.
Для этого используйте специальный параметр, который Битрикс24 создаёт для каждого поля.
Подробнее о работе с шаблонами и параметрами читайте в статье Шаблоны документовК примеру, добавим в шаблон поле Адрес доставки. Это поле с типом Адрес Google-карты, в котором мы указываем точное местоположение клиента для курьера.
Прежде всего узнаем нужный нам параметр. Перейдем в раздел Документ — Добавить новый шаблон.
Нажмём шестерёнку и выберем пункт Список полей.
Здесь расположены все доступные параметры, введём в поиске название нашего поля.
Скопируем символьный код и вставим в шаблон документа.
Готово! Документ теперь содержит адрес из пользовательского поля.
Как же выводятся разные типы пользовательских полей?
В документах поддерживаются все типы пользовательских полей, кроме Бронирование ресурсов и Да/Нет.
-
Адрес Google-карты выводится как строка с адресом и координатами.
-
Для Привязки к пользователю создаётся набор полей (такой же, как у поля Ответственный).
-
Поле типа Файл можно использовать по аналогии с логотипами, печатью и подписями.
Как работать с изображениями в шаблонах читайте в блоке Как добавить в шаблон печать, подпись или другое изображение?Если вставить параметр для такого поля как текст — ничего не произойдет.
-
Поле типа Деньги выводится по настройкам выбранной валюты в вашем Битрикс24.
-
Для
Привязки к элементам CRM создаётся набор полей. Например, если привязка происходит к сделкам — то и набор полей будет как у сделок.Для правильной работы необходимо выбрать привязку только к одному элементу. В ином случае Битрикс24 не сможет правильно сформировать параметры.
Если у поля есть привязка, например, к сделке — вы не сможете получить доступ к пользовательским полям этой сделки.
Bitrix Q&A
спросил 17 Март от аноним спросил 28 Янв от аноним спросил 26 Дек, 20 от аноним спросил 02 Ноя, 20 от анонимКак выгрузить из 1С в уже существующий инфоблок Битрикс | Page 2
Недавно столкнулся с задачей выгрузить данные из 1С:Управление торговлей 11 на сайт под управлением 1С-Битрикс в уже существующий инфоблок «Каталог товаров».
Получилось не с первого раза, поэтому решил записать все на случай, если понадобится повторить это в будущем.
Первое, что нужно сделать — это включить отображение кода загрузки из внешних источников для информационных блоков.
В режиме «Администрирование» откроем меню «Настройки», далее открываем «Настройки продукта — Настройки модулей — Информационные блоки», устанавливаем флаг «Показывать код загрузки из внешних источников»:
Затем необходимо настроить параметры импорта каталога.
Откроем меню «Магазин», далее «Настройки — Интеграция с 1С». Здесь нужно выбрать тип инфо-блока (Запомните символьный код инфоблока, приведенный в квадратных скобках! Он потребуется чуть позже.) и устанавить флаг «При выгрузке учитывать тип инфоблока»:
Рекомендую в этих настройках сразу установить следующие флаги:
- Использовать настройки инфоблока для обработки изображений — чтобы настраивать это только в одном месте;
- Транслитерировать символьный код из названия при добавлении элемента или раздела — иначе будут возникать ошибки типа «обязательное поле «символьный код» не заполнено», либо уберать флаг обязательности заполнения символьного кода в настройках инфоблока «Инфоблоки — Типы инфоблоков — Каталоги».
- Выгружать предложения (характеристики) в отдельный инфоблок — этот флаг следует установить в том случае, если номенклатура ведется в разрезе характеристик.
Теперь осталось настроить выгрузку данных из 1С и определить идентификатор каталога.
Откроем конфигурацию 1С:УТ 11 «Администрирование — Синхронизация данных», устанавливаем флаг «Обмен данными с сайтом», открываем «Узлы обмена с сайтами».
Создадим новый узел обмена, выбираем рижим обмена «Выгрузка товаров», в качестве адреса сайта необходимо указать http://сайт/bitrix/admin/1c_exchange.php:
На закладке «Выгрузка товаров» находим идентификатор каталога и копируем его в буфер обмена:
Откроем меню «Контент», далее «Инфоблоки — Типы инфоблоков — Каталоги», открываем искомый каталог. В поле «Внешний код» указываем тип инфоблока из настроек параметров импорта, и через дефиз идентификатор каталога из 1С:
После этого можно запустить обмен с сайтом в 1С.
В случае, если Вы используете «Торговые предложения», то они будут иметь тот же внешний код, что и каталог товаров, но с решеткой в конце, например, «catalog-280af51d-ef93-11de-9de0-001c7e202cbc#».
Если в 1С есть «Номенклатура» или «Группы номенклатуры» с одинаковыми названиями, то в настройках инфо-блока каталога на закладке «Поля» или «Поля разделов» соответственно, для символьного кода нужно убрать флаг обязательности заполнения и проверки на уникальность, а также перенастроить ЧПУ на использование ID вмести CODE.
Пример.
Имеются группы номенклатуры:
В этом случае символьные коды групп после транслитерации получатся следующие:
Получается, что для зимней одежды и для зимней обуви будет одинаковая ссылка: /catalog/zima, что приведет к ошибке в отображении товаров. Чтобы при импорте из 1С не возникало ошибок, откроем меню «Контент», далее «Инфоблоки — Типы инфоблоков — Каталоги — Каталог товаров 1С», на закладке «Поля разделов» убираем флаги:
На закладке «Инфоблок» меняем SECTION_CODE на SECTION_ID:
После этого ссылка на зимнюю одежду будет, например, такой /catalog/81/, а на зимнюю обувь такой /catalog/82/.
Как сгенерировать символьные коды для разделов или элементов инфоблока, если они не заданы в Битриксе
if(!CModule::IncludeModule(«iblock»))
{
echo «Error with iblock module!»;
die;
}
$arParams[‘IBLOCK_ID’] = 17;
$arParams[‘LIST_CNT’] = 50;
$arParams[‘IS_ADD_RAND’] = false;
$arParams[‘TYPE_WORK’] = ‘section’; // {section | element}
$arOrder = array(
«sort» => «inc»,
);
$arFilter = array(
«IBLOCK_ID» => $arParams[‘IBLOCK_ID’],
«IBLOCK_LID» => SITE_ID,
//»CODE» => «»,
«CODE» => false
);
$arTransParams = array(
«max_len» => 100,
«change_case» => ‘L’, // ‘L’ — toLower, ‘U’ — toUpper, false — do not change
«replace_space» => ‘-‘,
«replace_other» => ‘-‘,
«delete_repeat_replace» => true
);
if($arParams[‘TYPE_WORK’] == ‘section’){
//for SECTIONS
$db_elemens = CIBlockSection::GetList($arOrder, $arFilter, false);
$db_elemens->NavStart($arParams[‘LIST_CNT’]);
echo ‘<ПРЕ>’;
while($ar_res = $db_elemens->GetNext())
{
$transName = CUtil::translit($ar_res[«NAME»], «ru», $arTransParams);
if($arParams[‘IS_ADD_RAND’]){
$transName = $transName.$arTransParams[«replace_space»].$ar_res[«ID»];
}
$arPropArray = Array( «CODE» => $transName );
$el = new CIBlockSection;
$res = $el->Update($ar_res[«ID»], $arPropArray);
echo «result for <b>».$ar_res[«NAME»].»</b> is <b>».$transName.'</b>’.($res?» and OK»:» and failed»).»\r\n»;
}
echo ‘</ПРЕ>’;
}elseif($arParams[‘TYPE_WORK’] == ‘element’){
// for ELEMENTS
$db_elemens = CIBlockElement::GetList($arOrder, $arFilter, false, array(«nTopCount» => $arParams[‘LIST_CNT’]));
$i = 0;
echo ‘<ПРЕ>’;
while($obElement = $db_elemens->GetNextElement())
{
$ar_res = $obElement->GetFields();
$transName = CUtil::translit($ar_res[«NAME»], «ru», $arTransParams);
if($arParams[‘IS_ADD_RAND’]){
$transName = $transName.$arTransParams[«replace_space»].$ar_res[«ID»];
}
$arPropArray = Array( «CODE» => $transName, );
$el = new CIBlockElement;
$res = $el->Update($ar_res[«ID»], $arPropArray);
echo «result for <b>».$ar_res[«NAME»].»</b> is <b>».$transName.'</b>’.($res?» and OK»:» and failed»).»\r\n»;
}
echo ‘</ПРЕ>’;
}
Битрикс. Создание комплексного компонента. Часть 1 из 4. Категория: Web-разработка • CMS Битрикс
Давайте создадим три простых компонента и объединим их в комплексный. Этот комплексный компонент будет уметь показывать содержимое инфоблока. Инфоблок включает в себя элементы и разделы. Значит, наш комплексный компонент должен уметь:
- показывать элемент инфоблока, простой компонент
tokmakov:iblock.element
- показывать раздел инфоблока, простой компонент
tokmakov:iblock.section
- показывать главную страницу инфоблока, простой компонент
tokmakov:iblock.popular
Создадим внутри папки /local/
такую структуру:
[local] [components] [tokmakov] [iblock] [iblock.element] [iblock.section] [iblock.popular]
[iblock] [templates] [.default] [tokmakov] [iblock.element] [.default] template.php style.css [iblock.section] [.default] template.php style.css [iblock.popular] [.default] template.php style.css element.php section.php popular.php .description.php .parameters.php component.php
[iblock.element] [templates] [.default] template.php style.css .description.php .parameters.php component.php
[iblock.section] [templates] [.default] template.php style.css .description.php .parameters.php component.php
[iblock.popular] [templates] [.default] template.php style.css .description.php .parameters.php component.php
Чтобы немного упростить задачу, я здесь пропустил папку lang
. Так что, если нужен комплексный компонент «по фен-шуй» — сделайте это сами. Лично я сомневаюсь, что Битрикс со своим г…но-кодом когда-нибудь выйдет на международный уровень.
Красным цветом выделено все, что относится к комплексному компоненту, а зеленым выделены три простых компонента.
Простой компонент tokmakov:iblock.element
Выводит детальную информацию об элементе инфоблока: заголовок, детальную картинку, количество просмотров, детальное описание. В браузере это выглядит примерно так:
<?php /* * Файл local/components/tokmakov/iblock.element/.description.php */ if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true) die(); $arComponentDescription = array( 'NAME' => 'Элемент инфоблока', // название компонента 'DESCRIPTION' => 'Выводит детальную страницу элемента инфоблока', 'ICON' => '/images/icon.gif', // иконка компонента относительно папки компонента 'CACHE_PATH' => 'Y', // показывать кнопку очистки кеша 'SORT' => 30, // порядок сортировки в визуальном редакторе 'COMPLEX' => 'N', // признак комплексного компонента 'PATH' => array( // расположение компонента в визуальном редакторе 'ID' => 'other_components', // идентификатор верхнего уровеня в редакторе 'NAME' => 'Прочие компоненты', // название верхнего уровня в редакторе 'CHILD' => array( // второй уровень в визуальном редакторе 'ID' => 'other_iblock', // идентификатор второго уровня в редакторе 'NAME' => 'Информационный блок' // название второго уровня в редакторе ) ) );
<?php /* * Файл local/components/tokmakov/iblock.element/.parameters.php */ if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true) die(); // проверяем, установлен ли модуль «Информационные блоки»; если да — то подключаем его if (!CModule::IncludeModule('iblock')) { return; } /* * Получаем массив всех типов инфоблоков — для возможности выбора */ $arIBlockType = CIBlockParameters::GetIBlockTypes(); /* * Получаем массив инфоблоков — для возможности выбора; фильтруем их по * выбранному типу и по активности */ $arInfoBlocks = array(); $arFilter = array('ACTIVE' => 'Y'); // если уже выбран тип инфоблока, выбираем инфоблоки только этого типа if (!empty($arCurrentValues['IBLOCK_TYPE'])) { $arFilter['TYPE'] = $arCurrentValues['IBLOCK_TYPE']; } $rsIBlock = CIBlock::GetList( array('SORT' => 'ASC'), $arFilter ); while($iblock = $rsIBlock->Fetch()) { $arInfoBlocks[$iblock['ID']] = '['.$iblock['ID'].'] '.$iblock['NAME']; } /* * Настройки компонента */ $arComponentParameters = array( 'GROUPS' => array( // кроме групп по умолчанию, добавляем свою группу настроек 'SEO_SETTINGS' => array( 'NAME' => 'Настройки SEO', 'SORT' => 800 ), ), 'PARAMETERS' => array( // выбор типа инфоблока 'IBLOCK_TYPE' => array( 'PARENT' => 'BASE', 'NAME' => 'Выберите тип инфоблока', 'TYPE' => 'LIST', 'VALUES' => $arIBlockType, 'REFRESH' => 'Y', ), // выбор самого инфоблока 'IBLOCK_ID' => array( 'PARENT' => 'BASE', 'NAME' => 'Выберите инфоблок', 'TYPE' => 'LIST', 'VALUES' => $arInfoBlocks, ), // идентификатор элемента получать из $_REQUEST["ELEMENT_ID"] 'ELEMENT_ID' => array( 'PARENT' => 'BASE', 'NAME' => 'Идентификатор элемента', 'TYPE' => 'STRING', 'DEFAULT' => '={$_REQUEST["ELEMENT_ID"]}', ), // символьный код элемента получать из $_REQUEST["ELEMENT_CODE"] 'ELEMENT_CODE' => array( 'PARENT' => 'BASE', 'NAME' => 'Символьный код элемента', 'TYPE' => 'STRING', 'DEFAULT' => '={$_REQUEST["ELEMENT_CODE"]}', ), // использовать символьный код вместо ID; если отмечен этот checkbox, // в визуальном редакторе надо будет обязательно изменить SECTION_URL // и ELEMENT_URL, чтобы вместо #SECTION_ID# и #ELEMENT_ID# в шаблонах // ссылок использовались #SECTION_CODE# и #ELEMENT_CODE# 'USE_CODE_INSTEAD_ID' => array( 'PARENT' => 'URL_TEMPLATES', 'NAME' => 'Использовать символьный код вместо ID', 'TYPE' => 'CHECKBOX', 'DEFAULT' => 'N', ), // шаблон ссылки на страницу раздела 'SECTION_URL' => array( 'PARENT' => 'URL_TEMPLATES', 'NAME' => 'URL, ведущий на страницу с содержимым раздела', 'TYPE' => 'STRING', 'DEFAULT' => 'category/id/#SECTION_ID#/' ), // шаблон ссылки на страницу элемента 'ELEMENT_URL' => array( 'PARENT' => 'URL_TEMPLATES', 'NAME' => 'URL, ведущий на страницу с содержимым элемента', 'TYPE' => 'STRING', 'DEFAULT' => 'item/id/#ELEMENT_ID#/' ), // SEO-настройки 'SET_PAGE_TITLE' => array( 'PARENT' => 'SEO_SETTINGS', 'NAME' => 'Устанавливать заголовок страницы', 'TYPE' => 'CHECKBOX', 'DEFAULT' => 'Y', ), 'SET_BROWSER_TITLE' => array( 'PARENT' => 'SEO_SETTINGS', 'NAME' => 'Устанавливать заголовок окна браузера', 'TYPE' => 'CHECKBOX', 'DEFAULT' => 'Y', ), 'SET_META_KEYWORDS' => array( 'PARENT' => 'SEO_SETTINGS', 'NAME' => 'Устанавливать мета-тег keywords', 'TYPE' => 'CHECKBOX', 'DEFAULT' => 'Y', ), 'SET_META_DESCRIPTION' => array( 'PARENT' => 'SEO_SETTINGS', 'NAME' => 'Устанавливать мета-тег description', 'TYPE' => 'CHECKBOX', 'DEFAULT' => 'Y', ), // включать раздел в цепочку навигации? 'ADD_SECTIONS_CHAIN' => Array( 'PARENT' => 'ADDITIONAL_SETTINGS', 'NAME' => 'Включать раздел в цепочку навигации', 'TYPE' => 'CHECKBOX', 'DEFAULT' => 'Y', ), // настройки кэширования 'CACHE_TIME' => array('DEFAULT'=>3600), 'CACHE_GROUPS' => array( 'PARENT' => 'CACHE_SETTINGS', 'NAME' => 'Учитывать права доступа', 'TYPE' => 'CHECKBOX', 'DEFAULT' => 'Y', ), ), ); // добавляем еще одну настройку — на случай, если элемент инфоблока не найден CIBlockParameters::Add404Settings($arComponentParameters, $arCurrentValues);
Обратите внимание на параметр USE_CODE_INSTEAD_ID
. Если он не задан, элемент инфоблока будет получен по идентификатору. В противном случае — по символьному коду. Это сделано для того, чтобы избежать дублирования, когда одна и та же страница доступна по двум адресам. Внимательно следите за значением этого параметра, чтобы не получить 404 Not Found.
<?php /* * Файл local/components/tokmakov/iblock.element/component.php */ if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true) die(); /** @var CBitrixComponent $this */ /** @var array $arParams */ /** @var array $arResult */ /** @var string $componentPath */ /** @var string $componentName */ /** @var string $componentTemplate */ /** @global CDatabase $DB */ /** @global CUser $USER */ /** @global CMain $APPLICATION */ if (!CModule::IncludeModule('iblock')) { ShowError('Модуль «Информационные блоки» не установлен'); return; } if (!isset($arParams['CACHE_TIME'])) { $arParams['CACHE_TIME'] = 3600; } // тип инфоблока $arParams['IBLOCK_TYPE'] = trim($arParams['IBLOCK_TYPE']); // идентификатор инфоблока $arParams['IBLOCK_ID'] = intval($arParams['IBLOCK_ID']); // если получено некорректное значение идентификатора элемента или символьного // кода элемента инфоблока, показываем страницу 404 Not Found $notFound = false; if ($arParams['USE_CODE_INSTEAD_ID'] == 'Y') { // символьный код элемента инфоблока $arParams['ELEMENT_CODE'] = empty($arParams['ELEMENT_CODE']) ? '' : trim($arParams['ELEMENT_CODE']); if (empty($arParams['ELEMENT_CODE'])) { $notFound = true; } } else { // идентификатор элемента инфоблока $arParams['ELEMENT_ID'] = empty($arParams['ELEMENT_ID']) ? 0 : intval($arParams['ELEMENT_ID']); if (empty($arParams['ELEMENT_ID'])) { $notFound = true; } } if ($notFound) { \Bitrix\Iblock\Component\Tools::process404( trim($arParams['MESSAGE_404']) ?: 'Элемент инфоблока не найден', true, $arParams['SET_STATUS_404'] === 'Y', $arParams['SHOW_404'] === 'Y', $arParams['FILE_404'] ); return; } // шаблон ссылки на страницу с содержимым раздела $arParams['SECTION_URL'] = trim($arParams['SECTION_URL']); // шаблон ссылки на страницу с содержимым элемента $arParams['ELEMENT_URL'] = trim($arParams['ELEMENT_URL']); if ($this->StartResultCache(false, ($arParams['CACHE_GROUPS']==='N' ? false: $USER->GetGroups()))) { if ($arParams['USE_CODE_INSTEAD_ID'] == 'Y') { // работаем с символьным кодом элемента $ELEMENT_ID = CIBlockFindTools::GetElementID( // получаем идентификатор по символьному коду 0, // идентификатор элемента мы не знаем $arParams['ELEMENT_CODE'], // символьный код элемента false, // идентификатор раздела false, // символьный код раздела array( 'IBLOCK_ACTIVE' => 'Y', 'IBLOCK_ID' => $arParams['IBLOCK_ID'], 'ACTIVE' => 'Y', 'ACTIVE_DATE' => 'Y', 'SECTION_GLOBAL_ACTIVE' => 'Y', 'CHECK_PERMISSIONS' => 'Y', ) ); } else { // работаем с идентификатором элемента $ELEMENT_ID = $arParams['ELEMENT_ID']; } if ($ELEMENT_ID) { // какие поля элемента инфоблока выбираем $arSelect = array( 'ID', // идентификатор элемента 'CODE', // символьный код элемента 'IBLOCK_ID', // идентификатор инфоблока 'IBLOCK_SECTION_ID', // идентификатор раздела элемента 'SECTION_PAGE_URL', // URL страницы раздела элемента 'NAME', // название этого элемента 'DETAIL_PICTURE', // детальная картинка элемента 'DETAIL_TEXT', // детальное описание элемента 'DETAIL_PAGE_URL', // URL страницы этого элемента 'SHOW_COUNTER', // количество просмотров элемента 'PROPERTY_*', // пользовательские свойства ); // условия выборки элемента инфоблока $arFilter = array( 'IBLOCK_ID' => $arParams['IBLOCK_ID'], // идентификатор инфоблока 'IBLOCK_ACTIVE' => 'Y', // инфоблок должен быть активен 'ID' => $ELEMENT_ID, // идентификатор элемента инфоблока 'ACTIVE' => 'Y', // выбираем только активные элементы 'ACTIVE_DATE' => 'Y', // фильтр по датам активности 'SECTION_GLOBAL_ACTIVE' => 'Y', // фильтр по активности всех родителей 'CHECK_PERMISSIONS' => 'Y', // проверка прав доступа ); if ($arParams['SECTION_ID']) { $arFilter['SECTION_ID'] = $arParams['SECTION_ID']; } elseif ($arParams['SECTION_CODE']) { $arFilter['SECTION_CODE'] = $arParams['SECTION_CODE']; } // выполняем запрос к базе данных $rsElement = CIBlockElement::GetList( array(), // сортировка $arFilter, // фильтр false, // группировка false, // постраничная навигация $arSelect // поля ); // устанавливаем шаблоны путей для раздела и элемента, вместо тех, // которые указаны в настройках информационного блока $rsElement->SetUrlTemplates($arParams['ELEMENT_URL'], $arParams['SECTION_URL']); if ($obElement = $rsElement->GetNextElement()) { $arResult = $obElement->GetFields(); // пользовательские свойства $arResult['PROPERTIES'] = $obElement->GetProperties(); // получаем значения пользовательских свойст в удобном для отображения виде foreach ($arResult['PROPERTIES'] as $code => $data) { $arResult['DISPLAY_PROPERTIES'][$code] = CIBlockFormatProperties::GetDisplayValue($arResult, $data, ''); } /* * Добавляем в массив arResult дополнительные элементы, которые могут потребоваться в шаблоне */ // получаем SEO-свойства выбранного элемента $ipropValues = new \Bitrix\Iblock\InheritedProperty\ElementValues( $arResult['IBLOCK_ID'], $arResult['ID'] ); $arResult['IPROPERTY_VALUES'] = $ipropValues->getValues(); if (isset($arResult['DETAIL_PICTURE'])) { // получаем данные картинки элемента $arResult['DETAIL_PICTURE'] = (0 < $arResult['DETAIL_PICTURE'] ? CFile::GetFileArray($arResult['DETAIL_PICTURE']) : false); if ($arResult['DETAIL_PICTURE']) { $arResult['DETAIL_PICTURE']['ALT'] = $arResult['IPROPERTY_VALUES']['ELEMENT_DETAIL_PICTURE_FILE_ALT']; if ($arResult['DETAIL_PICTURE']['ALT'] == '') { $arResult['DETAIL_PICTURE']['ALT'] = $arResult['NAME']; } $arResult['DETAIL_PICTURE']['TITLE'] = $arResult['IPROPERTY_VALUES']['ELEMENT_DETAIL_PICTURE_FILE_TITLE']; if ($arResult['DETAIL_PICTURE']['TITLE'] == '') { $arResult['DETAIL_PICTURE']['TITLE'] = $arResult['NAME']; } } } // получаем данные о родительском разделе инфоблока $arSectionFilter = array( 'IBLOCK_ID' => $arResult['IBLOCK_ID'], 'ID' => $arResult['IBLOCK_SECTION_ID'], 'ACTIVE' => 'Y', ); // выполняем запрос к базе данных $rsSection = CIBlockSection::GetList(array(), $arSectionFilter); // устанавливаем шаблон пути для раздела, вместо того, // который указан в настройках информационного блока $rsSection->SetUrlTemplates('', $arParams['SECTION_URL']); if ($arResult['SECTION'] = $rsSection->GetNext()) { // путь к элементу от корня $arResult['SECTION']['PATH'] = array(); // если нужно добавить раздел в цепочку навигации — получаем всех родителей if ($arParams['ADD_SECTIONS_CHAIN'] == 'Y') { $rsPath = CIBlockSection::GetNavChain( $arResult['SECTION']['IBLOCK_ID'], $arResult['SECTION']['ID'], array( 'ID', 'NAME', 'SECTION_PAGE_URL' ) ); $rsPath->SetUrlTemplates('', $arParams['SECTION_URL']); while ($arPath = $rsPath->GetNext()) { $arResult['SECTION']['PATH'][] = $arPath; } } } } } if (isset($arResult['ID'])) { $this->SetResultCacheKeys( array( 'ID', 'NAME', 'IPROPERTY_VALUES' ) ); $this->IncludeComponentTemplate(); } else { $this->AbortResultCache(); \Bitrix\Iblock\Component\Tools::process404( trim($arParams['MESSAGE_404']) ?: 'Элемент инфоблока не найден', true, $arParams['SET_STATUS_404'] === 'Y', $arParams['SHOW_404'] === 'Y', $arParams['FILE_404'] ); } } // кэш не затронет все действия ниже, здесь работаем уже с другим $arResult if (isset($arResult['ID'])) { // счетчик просмотров элемента CIBlockElement::CounterInc($arResult['ID']); if ($arParams['SET_PAGE_TITLE'] == 'Y') { // установить заголовок страницы? if ($arResult['IPROPERTY_VALUES']['ELEMENT_PAGE_TITLE'] != '') { $APPLICATION->SetTitle($arResult['IPROPERTY_VALUES']['ELEMENT_PAGE_TITLE']); } else { $APPLICATION->SetTitle($arResult['NAME']); } } if ($arParams['SET_BROWSER_TITLE'] == 'Y') { // установить заголовок окна браузера? if ($arResult['IPROPERTY_VALUES']['ELEMENT_META_TITLE'] != '') { $APPLICATION->SetPageProperty('title', $arResult['IPROPERTY_VALUES']['ELEMENT_META_TITLE']); } else { $APPLICATION->SetPageProperty('title', $arResult['NAME']); } } // установить мета-тег keywords? if ($arParams['SET_META_KEYWORDS'] == 'Y' && $arResult['IPROPERTY_VALUES']['ELEMENT_META_KEYWORDS'] != '') { $APPLICATION->SetPageProperty('keywords', $arResult['IPROPERTY_VALUES']['ELEMENT_META_KEYWORDS']); } // установить мета-тег description? if ($arParams['SET_META_DESCRIPTION'] == 'Y' && $arResult['IPROPERTY_VALUES']['ELEMENT_META_DESCRIPTION'] != '') { $APPLICATION->SetPageProperty('description', $arResult['IPROPERTY_VALUES']['ELEMENT_META_DESCRIPTION']); } // добавить раздел в цепочку навигации? if ($arParams['ADD_SECTIONS_CHAIN'] == 'Y' && !empty($arResult['SECTION']['PATH'])) { foreach ($arResult['SECTION']['PATH'] as $arPath) { $APPLICATION->AddChainItem($arPath['NAME'], $arPath['~SECTION_PAGE_URL']); } } return $arResult['ID']; }
bool CBitrixComponent::StartResultCache( int cacheTime, string additionalCacheID, string cachePath )
Метод поддержки внутреннего кеширования компонента. Возвращает true
в случае, если кеш недействителен, или false
в противном случае.
Если кеш действителен, метод отправляет на экран его содержимое, заполняет $arResult
и возвращает false
. Если кеш недействителен, метод возвращает true
, кеширование завершается и кеш сохраняется при вызове методов
CBitrixComponent::IncludeComponentTemplate()
- или
CBitrixComponent::ShowComponentTemplate()
сразу после подключения шаблона компонента.
Параметры
cacheTime
— Время кеширования в секундах. Если этот параметр равенfalse
, то время кеширования берется из входного параметра$arParams['CACHE_TIME']
. Необязательный.additionalCacheID
— Кеш зависит от текущего сайта (SITE_ID
), имени компонента, имени шаблона, входных параметров$arParams
. Если кеш должен зависеть от каких-либо дополнительных параметров, то их необходимо передать сюда в виде строки. По умолчанию параметр равенfalse
, т.е. кеш зависит только от текущего сайтаSITE_ID
, имени компонента, имени шаблона и входных параметров$arParams
. Необязательный.cachePath
— Путь к файлу кеша относительно папки кешей. Необязательный.
<?php /* * Файл local/components/tokmakov/iblock.element/templates/.default/template.php */ if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true) die(); /** @var array $arParams */ /** @var array $arResult */ /** @global CMain $APPLICATION */ /** @global CUser $USER */ /** @global CDatabase $DB */ /** @var CBitrixComponentTemplate $this */ /** @var string $templateName */ /** @var string $templateFile */ /** @var string $templateFolder */ /** @var string $componentPath */ /** @var CBitrixComponent $component */ // шаблон компонента голосует против композита $this->setFrameMode(false); ?> <h2><?= $arResult['NAME']; ?></h2> <article> <?php if (!empty($arResult['DETAIL_PICTURE'])): ?> <img src="<?= $arResult['DETAIL_PICTURE']['SRC']; ?>" alt="<?= $arResult['DETAIL_PICTURE']['ALT']; ?>" title="<?= $arResult['DETAIL_PICTURE']['TITLE']; ?>" /> <?php endif; ?> <p>Количество просмотров: <?= $arResult['SHOW_COUNTER'] ? $arResult['SHOW_COUNTER'] : 0; ?></p> <?php if (!empty($arResult['DETAIL_TEXT'])): ?> <div> <?= $arResult['DETAIL_TEXT']; ?> </div> <?php endif; ?> <p><a href="<?= $arResult['SECTION']['SECTION_PAGE_URL']; ?>">Назад в раздел</a></p> </article>
/* * Файл local/components/tokmakov/iblock.element/templates/.default/style.css */ #iblock-element { }
Создадим раздел /demo/
и разместим на странице /demo/index.php
вызов компонента:
<?php require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); $APPLICATION->SetTitle("Статьи о домашних животных"); ?> <?php $APPLICATION->IncludeComponent( "tokmakov:iblock.element", "", Array( "ADD_SECTIONS_CHAIN" => "Y", "CACHE_GROUPS" => "Y", "CACHE_TIME" => "3600", "CACHE_TYPE" => "A", "ELEMENT_CODE" => $_REQUEST["ELEMENT_CODE"], "ELEMENT_ID" => $_REQUEST["ELEMENT_ID"], "ELEMENT_URL" => "item/id/#ELEMENT_ID#/", "FILE_404" => "", "IBLOCK_ID" => "5", "IBLOCK_TYPE" => "content", "MESSAGE_404" => "", "SECTION_URL" => "category/id/#SECTION_ID#/", "SET_BROWSER_TITLE" => "Y", "SET_META_DESCRIPTION" => "Y", "SET_META_KEYWORDS" => "Y", "SET_PAGE_TITLE" => "Y", "SET_STATUS_404" => "Y", "SHOW_404" => "Y", "USE_CODE_INSTEAD_ID" => "N" ) ); ?> <?php require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); ?>
Поиск: CMS • Web-разработка • Битрикс • Инфоблок • Компонент • Раздел инфоблока • Шаблон компонента • Элемент инфоблока
1С-Битрикс. Выводим свойства элементов в компоненте
Информационный блок (он же «Инфоблок») — ключевой модуль для Битрикса, позволяющий хранить, обрабатывать и выводить огромные массивы данных. Разработчики CMS постарались сделать работу с ним очень простой и не требующей каких-либо глубоких знаний самой системы.Стоит отдельно уточнить, что данный материал предполагает, что вы уже знакомы с компонентом «Инфоблок», имеете хотя бы общее представление о его настройках и уже создавали свойства.
Для хранения данных, в зависимости от типа компонента, используются разные переменные:- Если необходимо вывести свойство в компоненте «Список новостей» —
$arItem
- Если выводим свойство в компоненте «Детальная страница» —
$arResult
Стандартные свойства элемента
Для начала разберём стандартные свойства элементов, которые работают «из коробки». Посмотреть их можно в шаблоне компонентов «Новости», «Список новостей» или «Детальная страница». Ниже представлен перечень основных свойств:<? echo $arItem["ID"]; // ID элемента echo $arItem["NAME"]; // Название (заголовок) элемента echo $arItem["ACTIVE_FROM"]; // Дата и время начала активности элемента echo $arItem["DISPLAY_ACTIVE_FROM"]; // Только дата начала активности echo $arItem["LIST_PAGE_URL"]; // Ссылка на страницу со списком элементов echo $arItem["DETAIL_PAGE_URL"]; // Ссылка на детальную страницу элемента echo $arItem["PREVIEW_TEXT"]; // Превью текст элемента echo $arItem["DETAIL_TEXT"]; // Детальный текст элемента echo $arItem["PREVIEW_PICTURE"]; // Ссылка на картинку превью ?>Также есть возможность вывести дополнительные свойства. Для этого в настройках вывода компонента во вкладке «Источник данных» находим строчку «Поля» и выбираем нужные свойства. Ниже приведён список самых часто используемых:
<? echo $arItem["IBLOCK_ID"]; // ID инфорблока, где хранится элемент echo $arItem["CODE"]; // Символьный код элемента echo $arItem["XML_ID"]; // Внешний код элемента echo $arItem["TAGS"]; // Список тегов элемента echo $arItem["CREATED_BY"]; // Кем создан элемент - ID пользователя echo $arItem["CREATED_USER_NAME"]; // Кем создан элемент - логин и имя пользователя echo $arItem["SHOW_COUNTER"]; // Количество просмотров элемента echo $arItem["DETAIL_PICTURE"]; // Ссылка на детальная картинка echo $arItem["DATE_ACTIVE_TO"]; // Дата завершения активности элемента ?>Теперь перейдем к пользовательским свойствам.
Перед выводом их значений на страницу, необходимо эти свойства создать. Для этого нужно перейти в настройки инфоблока.
Во вкладке «Свойства» вводим название, выбираем тип будущего свойства, определяем символьный код, проводим более тонкие настройки (для некоторых свойств это критично).
Пользовательские свойства элемента
У нас есть созданный ранее инфоблок, мы создали несколько свойств с различными типами данных. Теперь сосредоточимся на их выводе на странице сайта. Ключевая задача — вывести свойства по отдельности. Для этого необходимо зайти в настройки компонента («Новости», «Список новостей» или «Детальная страница») и в графе «Свойства» выбрать все те свойства, которые собираетесь выводить на страницу. После этого нажимаем кнопку «Сохранить» и переходим во вкладку «Редактировать шаблон компонента»Теперь необходимо вызвать нужные нам свойства в нужных местах страницы. В зависимости от типа используемого компонента («Список новостей» или «Детальная страница») это делается немного по разному.
Для компонента «Список новостей»
Для вывода свойств типа Текст, Число, Список, Привязка элементов, Дата и т.д. в нужном месте страницы вставляем вот этот код:<?=$arItem["PROPERTIES"]["код_свойства"]["VALUE"];?> // или <?echo $arItem["DISPLAY_PROPERTIES"]["код_свойства"]["DISPLAY_VALUE"];?>Если необходимо вывести свойство типа TEXT/HTML:
<?=$arItem["PROPERTIES"]["код_свойства"]["VALUE"]["TEXT"];?> // просто текст <?=$arItem["PROPERTIES"]["код_свойства"]["~VALUE"]["TEXT"];?> // или формат html
Для компонента «Детальное описание»
Для вывода свойств типа Текст, Число, Список, Привязка элементов, Дата и т.д. в нужном месте страницы вставляем вот этот код:<?=$arResult["PROPERTIES"]["код_свойства"]["VALUE"];?> // или <?echo $arResult["PROPERTIES"]["код_свойства"]["VALUE"];?>Часто необходима проверка свойства на наличие в нём значения. Делается это следующим образом:
<?if($arItem["PROPERTIES"]["код_свойства"]["VALUE"]):?> <?echo $arItem["PROPERTIES"]["код_свойства"]["VALUE"];?> <?endif;?> // или <?if($arResult["DISPLAY_PROPERTIES"]["код_свойства"]["VALUE"]):?> <?=$arResult["DISPLAY_PROPERTIES"]["код_свойства"]["VALUE"]?> <?endif?>
Множественное свойство
При наличии множественного свойства с несколькими заполненными полями, поле["VALUE"]
становится массивом. Код для вывода одного значения будет выглядеть так:<?echo $arItem["PROPERTIES"]["код_свойства"]["VALUE"][порядковый_номер];?>Если необходимо вывести сразу все элементы массива, то можно поступить следующим образом:
<?foreach($arItem["PROPERTIES"]["код_свойства"]["VALUE"] as $result){ echo $result.'<br>'; };?>
Section code path bitrix
Многоуровневые ЧПУ
Задача всем знакома до боли. Задача: сделать ЧПУ вида:
Ранее приходилось использовать внештатные методы решения данной проблемы. Но в новых версиях битрикса это решается очень просто! Для создания такого ЧПУ необходимо использовать специальную константу #SECTION_CODE_PATH# Как это выглядит:
В помощь трудящимся!
Если в шаблоне bitrix:catalog.section компонента catalog не работает путь из символьных кодов, как правило это вылазит когда используется вывод товаров и из подразделов — поможет небольшой код в result_modifier.php
Теперь в независимости от уровня нахождения в каталоге, путь к карточке товара будет выводиться истинный.
1. Переключитесь в режим правки и зайдите в настройки любого компонента каталога.
2. Перейдите в пункт меню «Управление ссылками», отредактируйте поле «Детальная информация», задав нужные параметры для отображения ссылок.
ELEMENT_ID — если вы хотите, чтобы в ссылках отображался ID товара: /catalog/dushevye_kabiny/254 (ID товара)
ELEMENT_CODE — для отображения символьного кода товара: catalog/santekhnika/dushevye_kabiny/victoria_f-217 (код товара)
Настройка инфоблока каталога
1. В административной части сайта перейдите в настройки каталога товаров:
Контент → Инфоблоки →Типы инфоблоков → Каталог → Каталог товаров
2. Проверьте, совпадают ли коды, заданные в компоненте каталога, с кодами в строках URL страницы инфоблока, URL страницы раздела и URL страницы детального просмотра.
Если вы указали в настройках параметров компонента ELEMENT_ID, то и в этих строках должен содержаться именно это значение. Иначе ЧПУ будет работать некорректно, из-за чего возникнут проблемы с отображением товаров каталога.
Здесь же вы можете задать дополнительные параметры для разделов, кликнув на кнопку с многоточием и выбрав нужные настройки ЧПУ.
Например:
SECTION_CODE – символьный код родительского раздела
SECTION_ID – ID родительского раздела
SECTION_CODE_PATH – путь из символьных кодов раздела.
Внимание! Если вы используете параметр SECTION_CODE или SECTION_CODE_PATH, убедитесь, что символьные коды разделов уникальны. При совпадении символьных кодов система не поймет, какой раздел ей открыть, и не отобразит данные.
Для этого перейдите на вкладку «Поля разделов» в настройках инфоблока и отметьте пункты «Если код задан, то проверять на уникальность» и «Транслитерировать из названия при добавлении раздела».
Эти же параметры выставляем на вкладке «Поля», если задаем символьный код элемента (ELEMENT_CODE).
К примеру, вы хотите, чтобы в ссылках на товары использовался символьный код. Тогда код в поле «Детальная информация» в компоненте каталога будет выглядеть так:
А код в инфоблоке будет выглядеть так:
3. Сохраняем изменения и проверяем результат на сайте:
Изменение символьных кодов в шаблонах документов
Шаблоны документов содержат символьные коды, которые используются вместо разных данных. Например, код {DocumentCreateTime} используется в шаблоне документа и заменяется фактическим временем создания документа в форме печати документа.
Но существуют разные форматы даты или форматы адресов, как вы можете выбрать конкретный формат даты, который вам нужен?
Не волнуйтесь, вы можете изменить символьные коды в шаблонах документов и решить эту проблему.
Как это работает
Вы можете добавить определенные символы после ~ в символический код, чтобы изменить формат данных. Например, {DocumentCreateTime ~ d.m.Y h: s}.
Подробнее о редактировании шаблонов документов читайте в статье — Шаблоны документов.Вы можете изменить символьные коды для дат, адресов, имен и денежных сумм.
Дата и время
По умолчанию формат даты в шаблоне документа такой же, как и в стране, которой принадлежит этот шаблон документа.Давайте изменим символический код, который используется для добавления времени создания документа в форму печати документа.
Возможные форматы даты и времени
- д.м.н — 30.08.18
- д.м.н. — 30.08.2018
- j, n, Y — 30, 8, 2018
- H: i: s — 15:07:06
- Y-m-d g: i: s a — 2018-08-30 15:07:06 pm
- F j, Y, G: i — 30 августа 2018 г. 15:07
Подробнее о возможных форматах даты и времени вы можете прочитать в статье.
Вот как теперь выглядит печатная форма:
Имя
Вы можете изменить формат имени, добавив определенные слова в символьные коды. Например, символический код {FormattedName ~ Format = # TITLE # # NAME # # SECOND_NAME_SHORT # # LAST_NAME #} будет заменен приветствием, именем, первой буквой второго имени и фамилией в печатной форме.
Параметры формата имени
- # TITLE # — приветствие
- # ИМЯ # — имя
- # LAST_NAME # — фамилия
- # SECOND_NAME # — второе имя
- # NAME_SHORT # — первая буква имени
- # LAST_NAME_SHORT # — первая буква фамилии
- # SECOND_NAME_SHORT # — первая буква второго имени
Адрес
По умолчанию формат адреса в шаблоне документа совпадает с форматом адреса, используемым в стране, которой принадлежит этот шаблон документа.Но мы можем изменить символический код адреса и использовать, например, североамериканский формат адреса, хотя шаблон документа привязан к Великобритании.
Форматы адресов и разделители
Часть символьного кода Format определяет тип формата адреса:- 1 — Европа
- 2 — Великобритания
- 3 — Северная Америка
- 4 — Россия (Улица -> Страна)
- 5 — Россия (Страна -> Улица)
- 1 — запятая
- 2 — без сепаратора
- 3 — разрыв строки
Вот как будет выглядеть форма печати документа после модификации символьного кода адреса:
{Address} Символический код заменяется адресом, указанным в поле Street Address реквизитов компании.Денежные суммы
Для денежных сумм вы можете изменить символьный код, чтобы в печатной форме документа отображались нули после точки и валюты.
Параметры денежных сумм
- WZ (с нулями) — при выборе значения Y отображаются нули после точки. Например, 12.00 вместо 12.
- NS (Без знака) — при выборе значения N добавляется знак валюты. При выборе значения Y знак валюты не отображается.
Например, давайте изменим символьный код {TotalSum} так, чтобы после точки отображались нули и добавлялся знак валюты:
Вот как будет выглядеть форма для печати документа:
Телефон
Вы можете указать формат номера телефона, добавив определенный символический код после формата . Например:
{ClientPhone ~ format = E.164}
Доступные форматы:
- E.164 — +12122191234
- Международный — +1212219-12-34
- Национальный — 1 (212) 219-12-34
Конкретный продукт, налог или контакт из списка
Некоторые данные добавляются в документ в виде списка. Например, налоги, товары или контакты.
О том, как добавить список в документ, читайте в статье — Шаблоны документов.Вы можете добавить в документ определенный элемент из списка.Просто используйте символический код:
{ProductsProductName}
По умолчанию в документ будет добавлен первый элемент из списка.
Если вам нужно добавить элемент, который не является первым в списке, просто добавьте , индекс к этому символическому коду. Например, этот символический код добавит третий элемент:
{ProductsProductName ~ index = 2}
Первый элемент в списке имеет индекс = 0 .
«Несколько» полей
В CRM Битрикс24 поля можно пометить как Несколько . Это означает, что это поле может иметь несколько значений одновременно. Например, поля Phone, Email, Messeneger или любое настраиваемое поле, помеченное как Multiple .
Шаблоны документовне поддерживают типы Привязать к элементам CRM и Файл «Несколько» полей.
Используйте символический код mfirst , чтобы добавить в документ «несколько» значений поля:
- mfirst = y — добавить первое значение
- mfirst = n — сложить все значения
Например:
{TestField ~ mfirst = n}
По умолчанию значения разделяются запятыми.Используйте символический код mseparator , чтобы выбрать разделитель — cooma (1) или разрыв строки (2):
{TestField ~ mseparator = 2}
Перечисление всех продуктов, контактов или налогов из списка
Например, вы можете перечислить все продукты в документе. Просто добавьте all = y к соответствующему символическому коду:
{ProductsProductName ~ all = y}
Вместо запятой вы можете использовать разрыв строки в качестве разделителя, добавив к символьному коду mseparator = 2 :
{ProductsProductName ~ mseparator = 2, all = y}
Рекомендуемые статьи
CVE-2015-8358 — Уязвимость обхода каталога в битриксе.Модуль mpbuilder до 1.0.12 для Битрикс позволяет rem
ID | CVE-2015-8358 | ||||||
Резюме | Уязвимость обхода каталогов в модуле bitrix.mpbuilder до 1.0.12 для Битрикс позволяет удаленным администраторам включать и выполнять произвольные локальные файлы через .. (точка-точка) в имени элемента параметра массива «work» в admin / bitrix. mpbuilder_step2.php. | ||||||
Список литературы | |||||||
Уязвимые конфигурации | |||||||
CVSS |
| ||||||
CWE | CWE-22 | ||||||
КАПЕК |
| ||||||
Доступ |
| ||||||
Удар |
| ||||||
cvss-вектор через4 | AV: N / AC: L / Au: S / C: C / I: C / A: C | ||||||
refmap через4 | |||||||
Последнее крупное обновление | 10.09.2018 — 19:58 | ||||||
Опубликовано | 16-12-2015 — 21:59 | ||||||
Последнее изменение | 10.09.2018 — 19:58 |
Мои заметки — Блокнот v2.1.0 [Premium] [Mod Lite] — Приложения для Android
NokoPrint — Wi-Fi, Bluetooth, печать через USB v4.6.6 [Premium] [Mod]Требования: 4.4 и выше
Обзор: Печать PDF-файлов, фотографий, документов, веб-страниц на большинстве Wi-Fi, Bluetooth, USB-принтеров. Печатайте прямо со своего устройства Android быстро и легко. Снимайте, печатайте, делитесь фотографиями с семьей и друзьями. Распечатывайте счета, счета-фактуры, квитанции, посадочные талоны и многое другое дома, на работе или в дороге.
Печатайте прямо со своего Android-устройства быстро, легко и БЕСПЛАТНО!
Снимайте, печатайте и обменивайтесь фотографиями с семьей и друзьями.Распечатайте счета, квитанции, посадочные талоны и многое другое дома, на работе или в дороге!
Вы можете печатать фотографии, изображения, веб-страницы, файлы PDF и документы Microsoft Office без загрузки каких-либо дополнительных приложений или инструментов печати в любое время в любом месте практически на любом принтере с Wi-Fi, Bluetooth или USB.
Основные характеристики
• Печать прямо со своего телефона или планшета Android практически на любой струйный или лазерный принтер
• Печать фотографий и изображений (JPG, PNG, GIF)
• Печать документов PDF и файлов Microsoft Office Word, Excel и PowerPoint
• Печать сохраненных файлов, вложения электронной почты (PDF, DOC, XSL, PPT, TXT) и файлы с Google Диска или других облачных сервисов
• Печать веб-сайтов (HTML-страниц), доступных через встроенный веб-браузер
• Печать по Wi-Fi, Bluetooth, USB-OTG подключенные принтеры
• Печать через службу Google Cloud Print (включая сохранение на Google Диске как pdf)
• Интеграция с другими приложениями через меню «Печать», «Поделиться»
Расширенные функции
• Множество параметров печати (включая количество копий, подборку, диапазон страниц, размер бумаги, тип бумаги, лоток для бумаги, качество вывода и др.)
• Фотопечать без полей на матовой или глянцевой фотобумаге
• Цветная или монохромная (черно-белая ) печать
• Двусторонняя (односторонняя или двусторонняя) печать
• Печать на принтерах с поддержкой AirPrint
• Печать на Mopria-совместимых принтерах
• Печать на мобильных термопринтерах
• Совместное использование принтера Windows (SMB / CIFS) и Совместное использование принтера Mac (Bonjour) / IPP / LPD) совместим
Поддерживаемые принтеры
• HP Officejet, HP LaserJet, HP Photosmart, HP Deskjet, HP Envy, HP Ink Tank и другие модели HP
• Canon PIXMA, Canon LBP, Canon MF, Canon MP, Canon MX, Canon MG, Canon SELPHY и другие Canon модели
• Epson Artisan, Epson WorkForce, Epson Stylus и другие модели Epson
• Brother MFC, Brother DCP, Brother HL, Brother MW, Brother PJ и другие модели Brother
• Samsung ML, Samsung SCX, Samsung CLP и другие Модели Samsung
• Xerox Phaser, Xerox WorkCentre, Xerox DocuPrint и другие модели Xerox
• Dell, Konica Minolta, Kyocera, Lexmark, Ricoh, Sharp, Toshiba, OKI и другие принтеры
Удачной печати!
★ Премиум / Платные функции разблокированы
★ Реклама удалена / отключена
★ Нежелательные разрешения + действия удалены
★ Нежелательные службы + получатели и поставщики удалены
★ Действия рекламы + службы и поставщики удалены
★ Ссылки на рекламу / аналитику / Crashlytics удалены
★ Реклама методы аннулированы
★ Отображение рекламы отключено
★ Отладочный код удален
★ Изменена подпись исходного пакета
➡ Языки: многоязычная
➡ Архитектура ЦП: универсальная
➡ Разрешение экрана: 160 точек на дюйм, 240 точек на дюйм, 320 точек на дюйм, 480 точек на дюйм, 640 точек на дюйм
Что нового:
исправлений ошибок и улучшений
В приложении нет рекламы
Подробнее:
https: // play.