Допустим, таблица сделок, или лидов, или любой другой список, основанный на гридах (в CRM таких данных чуть менее, чем полностью). И допустим, что эта таблица должна выглядеть так, как установил админ, или другой супер-юзер. Решение под катом.
Дрёмин Станислав написал: В result_modifier брал настройки супер-юзера через CUserOptions::GetOption и записывал их через CUserOptions::SetOption для конкретного юзера.
Вот тут небольшой минус - перетираются собственные настройки пользователя. В случае, например, модуля из Маркета это делать нельзя - модуль удалили > настройки должны остаться.
Дрёмин Станислав, так прост вытащи через GetOption массив, потом через array_merge() добавь то что нужно и запиши, тогда не слетит ничего. А если ты просто передаешь массив с параметрами то он естественно затрет уже установленные пользователем параметры
require_once ($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/csv_data.php";);
$csvFile = new CCSVData('R', true);
$csvFile->LoadFile($_FILES['csv']['tmp_name']);
$csvFile->SetDelimiter(',');
while ($arRes = $csvFile->Fetch()) {
ec($arRes);
}
Собственно: - подключаем файл класса работы с CSV - создаем объект класса, указываем, что будет использоваться разделитель (R, есть еще фикс.поля F), и первая строка содержит заголовки (true); можно не указывать эти параметры и задать отдельными методами
- загружаем файл - ставим делиметер, где допустимые параметры: \t (табуляция), запятая, пробел, точка с запятой. - бежим как при обычной выборке из базы (напомню, Fetch возвращает НЕ обработанные данные, а GetNext безопасные).
Эту фичу наверное нужно использовать для того что бы избежать всяческих проблем с кодировкой и прочими настройками которые Битрикс учитывает. Антон там в строке подключения библиортеки лишнее
Практически каждый модуль имеет настройки. И иногда встает задача, что какую-то настройку для частного конкретного случая надо переопределить (для конкретной группы пользователей, или раздела сайта, или ID сайта). Но меняя в модуле, настройка меняется для всех случаев. Вот как это можно переопределить в частном случае.
Долганин Антон, сработал такой код, но он меняет значение настройки глобально для всех пользователей (он был вставлен прямо в init.php и скорее всего срабатывал на начальной стадии загрузки страницы, нужно понять при каком событии и как вызвать этот код):
use \Bitrix\Main\Config\Option;
class A extends Option
{
public static function changeOptions($module, $config, $value)
{
parent::$options[$module]['-'][$config] = $value;
}
}
A::changeOptions('main', 'new_user_registration_email_confirmation', 'N');
Долганин Антон написал: Вот для нового ядра (наследуемся и переопределяем protected)
Возможно для кого-то тема будет все еще актуальна. Код из последнего сообщения Антона в настоящее время не заработает. Вероятно, в одном из обновлений главного модуля было решено сменить порядок хранения настроек и теперь модуль является корневым ключом массива, а настройки с привязкой к сайтам (или без таковой), '-', 's1' и т.д. - являются вложенными в каждый модуль.
Поэтому предлагаю такую реализацию класса для решения данной задачи:
<?php
class ExtendedOption extends \Bitrix\Main\Config\Option
{
/**
* Локально изменить настройку определенного модуля для текущего хита.
* См. подробнее здесь: https://dev.1c-bitrix.ru/community/webdev/user/11948/blog/7799/
*
* @param $module
* @param $parameter
* @param $value
*/
public static function changeOptionForCurrentHit($module, $parameter, $value)
{
if (!isset(parent::$options[$module]['-'][$parameter])) {
static::get($module, $parameter);
}
parent::$options[$module]['-'][$parameter] = $value;
}
}
ExtendedOption::changeOptionForCurrentHit('main', 'captcha_registration', 'N');
Что если в вызов компонента system.auth.form добавить "AJAX_MODE" => "Y", а в шаблоне у <form убрать атрибут target ? Вроде работает ajax без дописок всяких.
Недавно столкнулся со старой версией битрикса у клиента, нужно было реализовать нечто подобное Если в методе CEvent::Send id сайта передан как массив, то в методе SendAttach нужно поправить выборку при обращении к таблице b_event_message
Долгое время рецепт работал. Но после одного из последних обновлений Битрикс скрипты im стали конфликтовать со скриптами админки. Чат пришлось отключить.
Хочу кратко описать как работать с XML в Битриксе правильно. Ибо не так давно (ну, для меня было неожиданностью по крайней мере) API для оного обновилось, и если раньше работали в лоб с массивом из XML, то сейчас для этого есть удобные инструменты.
if ($node = $xml->SelectNodes('/videos/video/pics')) {
print_r($node->children());
}
Где каждый такой чилдрен будет объектом CDataXMLNode.
Этого вполе достаточно для работы. Но более подробно изучить класс вы сможете по пути из п.1.
Дополнение:
1. Если формат XML с двоеточиями (неймспейсы которые, хз как правильно его называть):
<media:title></media:title>
то перед парсингом, надо сделать следующее:
$xml->delete_ns=false;
Спасибо за совет техподдержке.
2. Можно использовать не LoadString, а Load, которой передать абсолютный путь до файла. Метод хорош тем, что автоматически вычленяет кодировку из XML-файла (encoding) и конвертит файл в кодировку сайта. Есть минус - если кодировки в файле не найдется, будет считать, что файл находится в windows-1251 кодировке.
Столкнулся с довольно странным поведением (сначала думал) продукта, убил прилично времени. Так что, поделюсь этими граблями. Грабли относятся к БД с транзакциями (INNODB в MySQL, в частности).
Суть - пытаемся записать в Журнал сообщение при добавлении поста в форум. В данном виде все отлично работает. Но стоит нам откомментировать две нижние строчки, как ничего не добавляется - автоинкремент таблицы Журнала увеличивается, но лог не пишется. Это сейчас на простейшем обработчике 2 + 2 связываются легко, но стоило времени дойти до этого
В чем магия? Дело в том, что добавление постов в форум (а может и в блоги) окружено такой конструкцией в компонентах:
StartTransaction
AddMessage()
Commit OR RollBack
Для непосвященных, основная фишка транзаций - все-все что мы делаем после StartTransaction, упадет в базу только после Commit. Если же делается RollBack, то ничего не добавится. Вообще ничего.
И вот в эти грабли я и попал - в AddMessage генерировалась ошибка, а далее (в компоненте) делался RollBack. Соответственно, запись не ложилась в таблицу.
А можно ли закрывать транзакцию, если ее не открывать? У тебя получается $GLOBALS['DB']->RollBack(); дважды. Один ты закрыл, a другой, наверняка, еще где-то.
Артемий, все можно, только будет ли толк )) тоже самое можно сказать человеку закрыть два раза дверь не открывая, он команду получит, но ничего делать не будет, т.к. дверь уже закрыта =)
Большое спасибо, Антон, за пример! Как правильно заметил Андрей, в документации не указана переменная $arTemplateParameters - кучу времени убил, чтобы разобраться, почему дополнительные параметры не подтягиваются. Битриксу как всегда двойка в этой области.
Долганин Антон написал: под рукой. Вот требуется вам сохранять элемент со свойством, передавая просто название элемента списка, и не париться о том, есть ли такой вариант, или надо добавить н
Да это старо как битрикс! А вот как сделать если ты хочешь добавить в шаблон bitrix:catalog кроме стандартного набора еще один компонент и при этом использовать настройки комплексного компонента ($component), но не просто вынести эти настройки во вкладку "Дополнительно", а создать свою вкладку, по аналогии с существующими (настройки ТОПа или "С этим товаром покупают")??? Вот это как реализовать? Как добавить свою группу в параметрах шаблона?
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».