написал: Добрый день! не пойму как решить задачу ex2-92
Цитата
При индексации элементов информационного блока «Новости» заменять заголовок результата поиска на первые 50 символов текса анонса новости. для проверки решения достаточно пересохранить один элемент информационного блока
это надо вешать обработчик на изменение элемента и запускать переиндексацию? он жеж каждый раз тогда срабатывать будет даже мыслей никаких нету.
Тут похоже совсем "забили" на вопросы отвечать.
Я не дошел ещё до задачи но думаю что тут речь о событии "OnReindex" (или каком то другом) модуля "search". А при пересохранении элемента в CIBlockElement::Update есть параметр который переиндексирует его.
А какая версия Sublime Text, сейчас установлена на экзаменационном сервере? На демо-сборке версия 3, хочу уточнить может обновляли до 4 на экзаменационном?
Между 3 и 4 разница в настройках индексирования проекта (можно исключить из индекса то что в .gitignore , то есть по сути управлять индексированием, мне например кроме классов модуля main больше ничего не надо).
Я в процессе решения демонстрационных задач всё больше склоняюсь в сторону Sublime в качестве IDE. Komodo в разы тормознутее на мой взгляд. Да и по функциональности или так себе IDE или надо долго разбираться в нем. Sublime мне хватило 3 часа полистать документации официальной и вроде всё что мне надо для экзамена достаточно.
Ещё вопрос глобальный созрел. В заданиях связанных с событиями, насколько критично убирать печатать в init.php напрямую фразы типа "Товар невозможно деактивировать, у него [count] просмотров" или обязательно нужно их убирать в языковые файлы типа /lang/ru/php_interface/init.php
Все-таки при тех скоростях "железа" которые будут на экзамене, ведение языковых переменных существенная трата времени.
UPD. Ещё один вопрос глобального толка. Есть ли для результатов экзамена разница, используется у CDBResult Fetch() или GetNext(). С одной стороны Fetch() быстрее и экономнее по ресурсам. С другой стороны не будет ли замечания по безопасности данных если не используется GetNext() ?
написал: Добрый день! В курсе подготовки "Основные технологии и расширение типовых возможностей системы" одно из заданий к уроку 3 выглядит так: Реализовать проверку – при удалении товара из каталога, проверять: если количество просмотров товара (поле SHOW_COUNTER) больше 1, то отменять удаление, деактивировать товар и выводить в административный раздел соответствующее уведомление с указанием количества просмотров.
Получилось отменить удаление и вывести сообщение, но товар при этом не деактивируется. Как это реализовать? Код обработчика: ..... $APPLICATION->throwException('Количество просмотров больше одного, товар нельзя удалить!'); return false; .....
В задачах требующих заведения новых настроек в комплексном компоненте (через .parametrs.php шаблона), например bitrix:news, есть ли необходимость копипастить настройки в .parametrs.php дочерних компонентов, например bitrix:news.detail или достаточно просто их пробросить при вызове дочернего компонента в параметры вызова?
С одной стороны это займет время, которого в экзамене не так много, а отдельно простой компонент нигде не фигурирует, только в составе комплексного. Опять же не могут пришить "бездумную копиапасту" раз сам по себе визуальный ф-л настроек в данной задаче не нужен?
А с другой стороны в задаче сказано "В настройки компонентов news и news.detail добавить строковый параметр: «ID информационного блока для rel=canonical».", если в .parametrs.php news.detail не добавлю это будет считаться нарушением условий задачи?
Вопрос конечно несколько "блаженный", мол "сказано - делай!", но опыт показывает что мелочей на этих экзаменах не бывает.
Подскажите может кто сталкивался с такой задачей как в фильтрах (getList) ORM D7 решать вопрос если свойство Элемента ИБ называется так же как его поле. Например у меня есть свойство ACTIVE. И уже по нему отфильтровать не выйдет:
Код
[
'ACTIVE.VALUE' => 33,
]
Пошлет с ошибкой ведь он думает что я имею ввиду поле ACTIVE.
И что из за такой ерунды опять классы и методы D5 использовать?
У меня эта проблема, решилась принудительной установкой пароля root в mysql и после этого 3. Configure MySQL service for the pool и 2. Change password for MySQL root user
Контрольный флаг, вот здесь должна стоять Y, тогда создание новых сайтов будет работать.
Похоже битриксы гдето разминулись с обновлениями MySQL, где по дефолту авторизация без пароля под рутом работать перестала. Нужно явно пароль задать и жить спокойно.
Андрей Поляков написал: $params = array("params"=>array("redirect"=>"/events/")); $arMessages = array(); $message = Array( "USER_ID" => 2, //Идентификатор пользователя "TITLE" => "Title", //заголовок, только для Android "APP_ID" => "MyAppID", //Идентификатор приложения "MESSAGE" => “У нас сегодня акция! Не пропусти!”, "EXPIRY" => 0, //время жизни уведомления на сервере Apple и Google "PARAMS"=> $params, // если передавать не строку, тогда преобразует в JSON - потом нужно парсить "BADGE" => 1 //счетчик на иконке приложения );
У вас получается $message["PARAMS"]["params"]["redirect"] = "/events/";
один "params" тут лишний, и на стороне мобилки lastNotificationObject.params == undefined всё время.
Два дня бился пока не доперло переделать: $params = array("params"=>array("redirect"=>"/events/"));
use Bitrix\Iblock\ORM\PropertyValue;
// только значение
$value = new PropertyValue('new value');
// значение и описание
$value = new PropertyValue('new value', 'new descr');
// установка значения/описания
$element->setSomeString($value);
а то и ещё проще
Код
$element->setSomeString('new value');
Но в обоих случаях, например тут полный код:
Код
use \Bitrix\Main;
use \Bitrix\Iblock;
use \Bitrix\Iblock\ORM\PropertyValue;
Main\Loader::includeModule('iblock');
// вводные данные
$iblockId = 30;
// объект инфоблока
$iblock = Iblock\Iblock::wakeUp($iblockId);
$newElement = $iblock->getEntityDataClass()::createObject();
$newElement->setIblockId($iblockId);
$newElement->setName('Test name');
$value = new PropertyValue('new value');
$newElement->setPhone($value);
$res = $newElement->save();
if ( $res->isSuccess() )
{
echo 'New element id: '.$res->getId();
}
else
{
echo implode(', ', $res->getErrorMessages());
}
Я получаю старое, доброе
Код
[Bitrix\Main\SystemException]
Primary `ID` value is required for further operations (0)
/bitrix/modules/main/lib/orm/objectify/entityobject.php:1691
Что же делать с самыми примитивными свойствами ИБ?
P.S. iblock (20.0.350) main (20.0.600) - сегодня обновил до последнего (продукт Б24:Коробка с демо лицухой ещё на 7 дней) P.P.S. Последние эксперименты делал вообще в "Командная PHP-строка", чтобы исключить лишний код.