Добрый день. У меня такая ситуация - написано что можно работать с ноутбука с подключенным к нему монитором. Но тогда вопрос такой - веб-камера у меня встроена в монитор ноутбука, но ноутбук будет закрыт.
Как мне быть? Можно работать с закрытой крышкой ноутбука и получается что без веб-камеры, или можно подключить внешний монитор, но крышку ноутбука оставить открытой, чтобы веб-камера нормально показывала?
Добрый день. Подскажите пожалуйста как подключиться к демо-серверу по RDP? Вот тут: https://academy.1c-bitrix.ru/certification/programs/connection.php написано как подключаться к серверу в день экзамена, а вот как попробовать демо-сервер, не написано. Я хотел бы перед тем, как сдавать экзамен, попробовать поработать на демо стенде, но данных для RDP подключения нет. Подскажите, как мне быть?
написал: Добрый вечер. Нет, у меня как у администратора пропала панель, вопрос закрыт. Дело было в том, что в главном модуле я по глупости изменил имя префикса для названия cookies, вернув исходное имя префикса все встало.
Так какой префикс для названия cookies по-умолчанию надо выставить? А то у меня та же проблема.
Пытаюсь восстановить версию 23.300.100 Резервная копия весит 1.19Гб
Запускаю из браузера restore.php, далее следую шагам мастера восстановления. Предварительно разместил все 3 части архива в корень туй папки, в которую я хочу всё развернуть.
В общем архив он распаковал, как только дохожу до шага "Восстановление базы данных", прописываю вот такие параметры:
Сервер баз данных: localhost (по-умолчанию) Имя пользователя: root Пароль: пустой Имя базы данных: digit6 (такой БД нет) Создать базу если не существует: галочка стоит
Жму "Восстановить", и сразу же получаю вот такую ошибку:
Код
Fatal error: Uncaught mysqli_sql_exception: Unknown database 'digit6' in E:\OSPanel\domains\digit6\restore.php:1745 Stack trace: #0 E:\OSPanel\domains\digit6\restore.php(1745): mysqli_select_db() #1 E:\OSPanel\domains\digit6\restore.php(861): CDBRestore->Connect() #2 {main} thrown in E:\OSPanel\domains\digit6\restore.php on line 1745
Подскажите, кто-нибудь с таким сталкивался? Как оно лечится?
<?php
namespace Mycompany\Notify\Event;
use Mycompany\Notify\HLblockHelper;
use Bitrix\Main\Loader;
use Mycompany\Rest\Model\Debuger;
Loader::includeModule('highloadblock');
class HLblockElement
{
public static function addHLNotifyElement()
{
Debuger::dbgLog('addHLNotifyElement method','_notify_module');
}
}
Проблема в том, что когда я добавляю новый элемент Highload-блока, то метод addHLNotifyElement не вызывается почему то. Подскажите пожалуйста, что я делаю не так?
Изучаю работу ядра d7 и заинтересовал момент про runtime-поля. Хочу сделать запрос на извлчение полей из 2-х таблиц.
Есть Highload-блок "Голоса". В нём есть 3 поля: ID, UF_ELEMENT_ID, UF_IP_ADDRESS, UF_DATE Есть также другой Highload-блок "Посты". В нём поля: ID, UF_NAME
Нужно составить такой запрос, который бы извлекал данные из Highload-блока "Голоса", но добавлял бы к этим данным поле UF_NAME из Highload-блока "Посты". Связь по полю Голоса.UF_ELEMENT_ID=Посты.ID
На SQL написать не сложно, но интересно, как это делается используя runtime-поля в запросах вида $dbItems = \Bitrix\Highloadblock\HighloadBlockTable::getList
Та документация что есть - очень плохая. Не понятно, что именно нужно передавать в параметр runtime. Само описание метода getList взял отсюда: Ссылка
Классы для каждого Highload-блока сгенерировал из админки. Вот они:
Для Highload-блока "Посты":
Код
namespace Bitrix;
use Bitrix\Main\Localization\Loc,
Bitrix\Main\ORM\Data\DataManager,
Bitrix\Main\ORM\Fields\IntegerField,
Bitrix\Main\ORM\Fields\TextField;
Loc::loadMessages(__FILE__);
/**
* Class Posts
*
* Fields:
* <ul>
* <li> ID int mandatory
* <li> UF_NAME text optional
* </ul>
*
* @package Bitrix\
**/
class Posts extends DataManager
{
/**
* Returns DB table name for entity.
*
* @return string
*/
public static function getTableName()
{
return 'posts';
}
/**
* Returns entity map definition.
*
* @return array
*/
public static function getMap()
{
return [
new IntegerField(
'ID',
[
'primary' => true,
'autocomplete' => true,
'title' => Loc::getMessage('_ENTITY_ID_FIELD')
]
),
new TextField(
'UF_NAME',
[
'title' => Loc::getMessage('_ENTITY_UF_NAME_FIELD')
]
),
];
}
}
Для Highload-блока "Голоса":
Код
namespace Bitrix;
use Bitrix\Main\Localization\Loc,
Bitrix\Main\ORM\Data\DataManager,
Bitrix\Main\ORM\Fields\DatetimeField,
Bitrix\Main\ORM\Fields\FloatField,
Bitrix\Main\ORM\Fields\IntegerField,
Bitrix\Main\ORM\Fields\TextField;
Loc::loadMessages(__FILE__);
/**
* Class Voices
*
* Fields:
* <ul>
* <li> ID int mandatory
* <li> UF_ELEMENT_ID double optional
* <li> UF_IP_ADDRESS text optional
* <li> UF_DATE datetime optional
* </ul>
*
* @package Bitrix\
**/
class Voices extends DataManager
{
/**
* Returns DB table name for entity.
*
* @return string
*/
public static function getTableName()
{
return 'voices';
}
/**
* Returns entity map definition.
*
* @return array
*/
public static function getMap()
{
return [
new IntegerField(
'ID',
[
'primary' => true,
'autocomplete' => true,
'title' => Loc::getMessage('_ENTITY_ID_FIELD')
]
),
new FloatField(
'UF_ELEMENT_ID',
[
'title' => Loc::getMessage('_ENTITY_UF_ELEMENT_ID_FIELD')
]
),
new TextField(
'UF_IP_ADDRESS',
[
'title' => Loc::getMessage('_ENTITY_UF_IP_ADDRESS_FIELD')
]
),
new DatetimeField(
'UF_DATE',
[
'title' => Loc::getMessage('_ENTITY_UF_DATE_FIELD')
]
),
];
}
}
Только вот почему то в $elements ничего не попадает. Сами данные в Highload-блоках есть. Подскажите пожалуйста, как правильно составить запрос, чтобы всё работало. Скриншоты прикрепил.
Всем добрый день. Столкнулся с проблемой: При установке Битрикс 24 на локальный сервер (OpenServer 5.4.3), PHP: 8.1 вылазиет ошибка, что якобы не хватает памяти.
У кого-нибудь такое было? Как это лечится? Подробности на скриншоте.
Всем привет! тоже столкнулся с такой проблемой - создал функцию-агент (testAgent()) в /local/php_interface/init.php Во содержимое init.php:
Код
<?
use Bitrix\Main\EventManager;
use Bitrix\Main\Loader;
$eventManager = EventManager::getInstance();
$eventManager->addEventHandler('main', 'OnBeforeProlog', 'setUserLastActivityDate');
/**
* @return void
* @global $USER
*/
function setUserLastActivityDate()
{
if (!Loader::includeModule('socialnetwork')) {
return;
}
global $USER;
if ($USER->IsAuthorized()) {
CUser::SetLastActivityDate($USER->GetID());
}
}
function testAgent()
{
dbgLog('test agent function','_testAgent');
return "testAgent();";
}
if (file_exists($_SERVER["DOCUMENT_ROOT"] . "/local/php_interface/include/functions.php")) {
//require_once($_SERVER["DOCUMENT_ROOT"] . "/local/php_interface/include/functions.php");
}
if (file_exists($_SERVER["DOCUMENT_ROOT"] . "/local/php_interface/autoloader.php")) {
//require_once($_SERVER["DOCUMENT_ROOT"] . "/local/php_interface/autoloader.php");
}
if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/local/php_interface/events.php')) {
require_once $_SERVER['DOCUMENT_ROOT'] . '/local/php_interface/events.php';
}
функция должна создавать log-файл с произвольным содержимым.
Сделал всё, как тут выше рекомендовали:
залогировал массив $agents_array в файле bitrix/modules/main/classes/mysql/agent.php - моей функции там не оказалось В таблице b_agent поле DATE_CHECK было пустым В файле /bitrix/php_interface/dbconn.php установка константы
Код
define('BX_CRONTAB_SUPPORT', true);
была закомментирована В таблице b_option удалил все записи, где в поле NAME указано agents_use_crontab и check_agents
Но всё равно агент не запускается. Помогите пожалуйста. Что я делаю не так?? Скриншоты со списком агентов и скриншот таблицы b_agent прикрепил.
Жму вверху значок "карандаш с квадратом", далее выбираю "закрытый чат". Появляется вверху строковое поле для поиска пользователей, которых нужно найти, чтобы добавить в этот чат. Но во никакие пользователи там не ищутся. Что с этим делать - пока не знаю. Может есть какой-либо другой способ создать групповой чат, используя компонент bitrix:im.messenger?
Скриншоты все прикладываю. Помогите пожалуйста. Редакция Битрикс: 18.5.180 (Корпоративный портал)
Всем привет. Столкнулся с такой проблемой. Не могу добавить новое поле в только что созданный Highload-блок.
Когда добавляю запись в Highload-блок, появляется ссылка на добавление пользовательского поля и после того, как я выбираю тип данных (строка) и задаю код поля, отображается вот такая ошибка:
Код
Fatal error: Class 'IRestService' not found in E:\OSPanel\domains\digit3\bitrix\modules\crm\classes\general\restservice.php on line 38
Потом я просто перехожу на страницу /bitrix/admin/ , кликаю из админки по нужному мне Highload-блоку, и отображается уже другая ошибка:
Код
[Bitrix\Main\DB\SqlQueryException] Mysql query error: (1054) Unknown column 'gasu.UF_XMLBODY' in 'field list' (400)
SEL ECT
`gasu`.`ID` AS `ID`,
`gasu`.`UF_XMLBODY` AS `UF_XMLBODY`
FR OM `gasu` `gasu`
ORDER BY `ID` ASC
LIMIT 0, 20
E:\OSPanel\domains\digit3\bitrix\modules\main\lib\db\mysqliconnection.php:137
#0: Bitrix\Main\DB\MysqliConnection->queryInternal(string, array, NULL)
E:\OSPanel\domains\digit3\bitrix\modules\main\lib\db\connection.php:330
#1: Bitrix\Main\DB\Connection->query(string)
E:\OSPanel\domains\digit3\bitrix\modules\main\lib\orm\query\query.php:3193
#2: Bitrix\Main\ORM\Query\Query->query(string)
E:\OSPanel\domains\digit3\bitrix\modules\main\lib\orm\query\query.php:806
#3: Bitrix\Main\ORM\Query\Query->exec()
E:\OSPanel\domains\digit3\bitrix\modules\main\lib\orm\data\datamanager.php:467
#4: Bitrix\Main\ORM\Data\DataManager::getList(array)
E:\OSPanel\domains\digit3\bitrix\modules\highloadblock\admin\highloadblock_rows_list.php:254
#5: require(string)
E:\OSPanel\domains\digit3\bitrix\admin\highloadblock_rows_list.php:1
Права на инфоблок стоят: Для всех пользователей - чтение. Не понимаю почему, но выбирает все элементы из этого инфоблока, а по дате не фильтрует. Помогите пожалуйста, как это лечится?
Столкнулся вот с какой проблемой: Добавил из админки новый Highload-блок под справочник. Добавил в него 3 поля. Потом из админки хочу посмотреть список записей этого Highload-блока, и у меня ошибка появляется:
Код
[Bitrix\Main\DB\SqlQueryException]Mysql query error: (1054) Unknown column 'c_fo.UF_CFO_CODE' in 'field list' (400)
SEL ECT
`c_fo`.`ID` AS `ID`,
`c_fo`.`UF_CFO_CODE` AS `UF_CFO_CODE`,
`c_fo`.`UF_CFO_NAME` AS `UF_CFO_NAME`,
`c_fo`.`UF_CFO_TECHNAME` AS `UF_CFO_TECHNAME`
FR OM `cfo` `c_fo`
ORDER BY `ID` ASC
LIMIT 0, 20
E:\OSPanel\domains\digit3\bitrix\modules\main\lib\db\mysqliconnection.php:137
#0: Bitrix\Main\DB\MysqliConnection->queryInternal(string, array, NULL)
E:\OSPanel\domains\digit3\bitrix\modules\main\lib\db\connection.php:330
#1: Bitrix\Main\DB\Connection->query(string)
E:\OSPanel\domains\digit3\bitrix\modules\main\lib\orm\query\query.php:3193
#2: Bitrix\Main\ORM\Query\Query->query(string)
E:\OSPanel\domains\digit3\bitrix\modules\main\lib\orm\query\query.php:806
#3: Bitrix\Main\ORM\Query\Query->exec()
E:\OSPanel\domains\digit3\bitrix\modules\main\lib\orm\data\datamanager.php:467
#4: Bitrix\Main\ORM\Data\DataManager::getList(array)
E:\OSPanel\domains\digit3\bitrix\modules\highloadblock\admin\highloadblock_rows_list.php:254
#5: require(string)
E:\OSPanel\domains\digit3\bitrix\admin\highloadblock_rows_list.php:
Добрый день! Подскажите пожалуйста, где взять описание каким образом программируются поля настроек модуля.
Пробую сейчас написать свой модуль. Делаю для него страницу настроек в админке. Создал файл options.php, вот его содержимое:
Код
<?php
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Config\Option;
$request = \Bitrix\Main\HttpApplication::getInstance()->getContext()->getRequest();
$moduleId = $request->get('mid');
//Загружаем языковые сообщения для указанного файла
Loc::loadMessages($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/options.php");
Loc::loadMessages(__FILE__);
\Bitrix\Main\Loader::includeModule($moduleId);
//Опции модуля. Каждый элемент массива $aTabs - это новая вкладка
$aTabs = [
[
"DIV" => "tab1",//Ячейки с ключами DIV - идентификатор ячейки
"TAB" => "Настройки",//TAB - имя ячейки, которое подписано на самой вкладке
"TITLE" => "Опции модуля",
//"CONTENT"=>"Содержимое вкладки",
"OPTIONS"=>[//OPTIONS - массив опций настроек модуля, которые имеются на данной вкладке
[
'option1_name',//Ключ опции, или имя поля у формы
'Подпись опции',//Имя поля на русском языке
'',//Значение опции по-умолчанию
/*[//Массив, описывающий само поле формы
'selectbox',
['1','2','3']
]*/
['selectbox', ['key1'=>'val1','key2'=>'val2']]
],
[
'option2_name',//Ключ опции, или имя поля у формы
'Подпись опции 2',//Имя поля на русском языке
'',//Значение опции по-умолчанию
/*[//Массив, описывающий само поле формы
'selectbox',
['1','2','3']
]*/
['file']
]
]
]
];
//Вывод вкладок
$tabControl = new CAdminTabControl("tabControl", $aTabs);
$tabControl->Begin();?>
<fo rm method="post" action='<?=$request->getRequestUri() ?>'>
<? foreach ($aTabs as $aTab){
if ($aTab['OPTIONS']){
$tabControl->BeginNextTab();
__AdmSettingsDrawList($moduleId, $aTab['OPTIONS']);
}
}
$tabControl->Buttons(); ?>
<input type="submit" name="Update" value="Сохранить" />
<input type="reset" name="reset" value="Сбросить" />
<?= bitrix_sessid_post(); ?>
</form>
<?php $tabControl->End();?>
Не могу нигде нагуглить - как правильно описать массив OPTIONS так, чтобы вывести на страницу поле типа "Файл" - чтобы можно было загружать файлы в разделе с настройками модуля.
В конечном счёте нужно, чтобы была возможность загружать CSV файл, и чтобы модуль уже считывал этот файл, и раскидывал бы данные по нужным таблицам. Логика уже написала, а вот правильно написать страницу с настройками модуля пока не получается. Помогите пожалуйста.
Кода на админ панели жму кнопку "Сбросить кеш" - то файл стилей применяется к шаблону, и у блока с классом test появляется синяя рамка, как и описано в файле стилей.
Но вот когда из адресной строки браузера я убираю параметр clear_cache=Y - то почему то рамка пропадает. Из этого я сделал вывод, что в кеш файл стилей не попадает.
Подскажите кто-нибудь, в чём может быть дело? Я смотрел файл кеша, и там в templateCachedData есть путь до моего css файла: /local/components/cache.old/templates/.default/style.css
Помогите пожалуйста. Перехожу на написание компонентов на D7, пробую писать компоненты, используя class.php вместо component.php
Видел у где-то, что в папке компонента, где лежит class.php - там же лежит и файл ajax.php Поискал документацию - для чего этот файл вообще нужен, нашёл только вот это: Ссылка
Но так и не понял, для чего этот файл вообще нужен, если вся логика работы компонента всё равно пишется в class.php ? Можете кто-нибудь своими словами рассказать, для чего этот файл вообще в компоненте нужен, и как его правильно писать, или дать ссылку, где бы подробно было это написано?
Потому что до сих пор все AJAX-запросы я делал используя JS, а именно jQuery и встроенный в него метода $.ajax. Этому методу передавал путь до php-файла, в котором бы запрос обрабатывался, а результат отдавался в метод success или error AJAX-запроса.
Сейчас например пишу кастомный компонент отправки формы на email. Нужно валидировать поля. Можно это сделать, только лишь используя файл ajax.php, без использования JS/ jQuery ?
Столкнулся вот с какой проблемой. Пытаюсь сделать выборку - нужно получить все элементы инфоблока с группировкой по полю DATE_CREATE. Делаю на D7, вот код:
Код
$dbItems = \Bitrix\Iblock\ElementTable::getList(array(
//'order' => array('SORT' => 'ASC'), // сортировка
//'order' => array(),
'select' => array('ID','NAME','DATE_CREATE','PREVIEW_TEXT','PREVIEW_PICTURE','IBLOCK_ID', 'SORT'), // выбираемые поля, без свойств. Свойства можно получать на старом ядре \CIBlockElement::getProperty
'filter' => array('IBLOCK_ID' => $this->arParams['IBLOCK_ID']), // фильтр только по полям элемента, свойства (PROPERTY) использовать нельзя
'group' => array('DATE_CREATE'), // группировка по полю, order должен быть пустой
//'limit' => 1000, // целое число, ограничение выбираемого кол-ва
'offset' => 0, // целое число, указывающее номер первого столбца в результате
'count_total' => 1, // дает возможность получить кол-во элементов через метод getCount()
'runtime' => array(), // массив полей сущности, создающихся динамически
'data_doubling' => false, // разрешает получение нескольких одинаковых записей
'cache' => array( // Кеш запроса. Сброс можно сделать методом \Bitrix\Iblock\ElementTable::getEntity()->cleanCache();
'ttl' => 3600, // Время жизни кеша
'cache_joins' => true // Кешировать ли выборки с JOIN
),
));
$items = Array();
while ($arItem = $dbItems->fetch()){
$db_props = CIBlockElement::GetProperty($arItem['IBLOCK_ID'],$arItem['ID']);
while($ar_props = $db_props->Fetch()){
$props = $ar_props;
}
$arItem['PROPS'] = $props;
$items[] = $arItem;
}
Но вот когда распечатываю $items у меня на выходе вот что:
То есть элементы то выбираются, но никакой группировки нет. Или я может что-то не понимаю. Подскажите пожалуйста, каким образом \Bitrix\Iblock\ElementTable::g etList делает группировку, и как я это могу увидеть?
Попробовал я так сделать - некоторые товары почему-то по-прежнему продолжают отображаться в списке.
Также я добавил в параметр "HIDE_NOT_AVAILABLE" => "L", при вызове компонента bitrix:catalog.section.
В настройках модуля Торговый каталог стоят настройки: Включить количественный учет: Да Разрешить покупку при отсутствии товара (включая разрешение отрицательного количества товара): Нет
И всё равно при сортировке товаров по цене (по-возрастанию) товары, у которых нет цены - они почему то отображаются в начале списка, а надо, чтобы они отображались в конце списка.
Всем добрый день. Столкнулся вот с какой проблемой. Есть на страницу вызов компонента bitrix:catalog.section Также там есть пагинация - по 20 элементов на страницу.
Компонент нормально работает. Но если я например отсортировал список товаров по цене по возрастанию, то у меня в выборку также попадают и товары, у которых цена вообще не указана. Так вот. Нужно как то сделать так, чтобы товары, у которых цена не указана - чтобы они попадали в массив $arResult в самый конец.
Подскажите пожалуйста, куда копать. Я сначала думал просто в result_modifier.php вызвать array_filter и как то из исходного массива элементы с пустыми ценами достать, в отдельный массив сложить, и потом уже с помощью array_merge в конец прикрепить, но такое не прокатило, потому что пагинация есть, и даёт доступ только к 20 элементам из $arResult, которые доступны на странице.
Поэтому вопрос: подскажите, каким образом отсортировать массив компонента bitrix:catalog.section по цене по убыванию так, чтобы товары без цены были бы в конце списка?