#-----------------------------------------------#
# Начало блока конфигурации HTTP хоста
#-----------------------------------------------#
<VirtualHost *:%httpport%>
DocumentRoot "%hostdir%"
ServerName "%host%"
ServerAlias "%host%" %aliases%
ScriptAlias /cgi-bin/ "%hostdir%/cgi-bin/"
</VirtualHost>
<Directory "E:/OpenServer/OpenServer/domains/dev">
AllowOverride All
php_admin_value mbstring.func_overload 0
</Directory>
#-----------------------------------------------#
# Начало блока конфигурации HTTP хоста
#-----------------------------------------------#
<VirtualHost *:%httpport%>
DocumentRoot "%hostdir%"
ServerName "%host%"
ServerAlias "%host%" %aliases%
ScriptAlias /cgi-bin/ "%hostdir%/cgi-bin/"
<Directory "e:\openserver\openserver\domains\cli">
AllowOverride All
php_admin_value mbstring.func_overload 0
</Directory>
<Directory "E:/OpenServer/OpenServer/domains/dev">
AllowOverride All
php_admin_value mbstring.func_overload 0
</Directory>
</VirtualHost>
Если в инфоблоке несколько тысяч записей, какой запрос CIBlock::getList отработает быстрее, с применением arFilter или выборка всех записей?
public function ShowHead($bXhtmlStyle=true)
{
echo '<meta http-equiv="Content-Type" content="text/html; charset='.LANG_CHARSET.'"'.($bXhtmlStyle? ' /':'').'>'."\n";
$this->ShowMeta("robots", false, $bXhtmlStyle);
$this->ShowMeta("keywords", false, $bXhtmlStyle);
$this->ShowMeta("description", false, $bXhtmlStyle);
$this->ShowLink("canonical", null, $bXhtmlStyle);
$this->ShowCSS(true, $bXhtmlStyle);
$this->ShowHeadStrings();
$this->ShowHeadScripts();
}
Массив полей для группировки элемента. Если поля указаны, то выборка по ним группируется (при этом параметр arSelectFields будет проигнорирован), а в результат добавляется поле CNT - количество сгруппированных элементов. Если указать в качестве arGroupBy пустой массив, то метод вернет количество элементов CNT по фильтру. Группировать можно по полям элемента, а также по значениям его свойств. Для этого в качестве одного из полей группировки необходимо указать PROPERTY_, где PROPERTY_CODE - ID или символьный код свойства.
Необязательное. По умолчанию false - записи не группируются.
создала отдельный файл voting.php в шаблоне компонента
<?
require $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php";
/**
* Тут можете проверить, что все переменные пришли
* Я для себя буду использовать переменные:
* - ELEMENT_ID
* - USER_ID
*
* Просто писать факт голосования.
* В таблицу project_element_vote ( ID, ELEMENT_ID, USER_ID )
*/
global $USER;
/* @var object Объект приложения */
$oApplication = \Bitrix\Main\Application::getInstance();
/* @var object Объект соединения с БД */
$oConnection = $oApplication->getConnection();
/* @var object Хелпер для безопасной записи в БД*/
$oHelper = $oConnection->getSqlHelper();
/* @var object Объект для работы с входящими переменными */
$oRequest = $oApplication->getContext()->getRequest();
if ( $oRequest->isAjaxRequest() && !empty( $oRequest->get('ELEMENT_ID') ) )
{
$iUser = $USER->GetId();
$iElement = $oHelper->forSql( $oRequest->get('ELEMENT_ID') );
$sql = "INSERT INTO project_element_vote('ELEMENT_ID','USER_ID') VALUES ('{$iElement}','{$iUser}')";
$res = $oConnection->query($sql);
if ( $res )
{
echo 'ok';
die();
}
}
echo 'bad';
/* @var string Текст, в котором проводим замену*/
$str = <<<STRTEXT
[index:Звездочет]А тут хз что[/index]
Тут текст [guest]Иванов[/guest]
STRTEXT;
$oTextParser= (new TextParser($str))
->addRule("#\\[index:(.+?)\\](.*?)\\[/index\\]#ies", "indexShow('\\1', '\\2')")
->addRule("#\\[guest](.*?)\\[/guest]#ies","checkGuest('\\1')")
->parse();
/*
На выходе хочу получить:
-------------------------
Звездочет(А тут хз что)
Тут текст GUEST(Иванов)
*/
echo "<pre>";
var_dump($oTextParser->getText());
echo "</pre>";
function indexShow( $a, $b)
{
return $a."(".$b.")";
}
function checkGuest( $a )
{
return 'GUEST('.$a.')';
}
class TextParser
{
/* @var string Результат выполнения парсинга */
public $parsed;
/* @var string[] Ассоциативный список правил в формате: регулярка => функция для замены */
public $rules = [];
public function __construct( $text )
{
$this->parsed = $text;
}
/**
* Добавляет правило работы парсера
* Для использования цепочек возвращает текущий экземпляр
*
* @param string $regex
* @param string|callback $func
* @return TextParser
*/
public function addRule( $regex, $func )
{
$this->rules[ $regex ] = $func;
return $this;
}
/**
* Выполняет разброр исходного текста
* Для использования цепочек возвращает текущий экземпляр
*
* @return TextParser
*/
public function parse()
{
array_walk(
$this->rules,
function($function, $regular)
{
$this->parsed = preg_replace($regular, $function, $this->parsed);
}
);
return $this;
}
/**
* Возвращает результат парсера (или исходный текст, если был вызван до метода parse)
*
* @return string
*/
public function getText()
{
return $this->parsed;
}
}
<?php
AddEventHandler("main", "OnAdminListDisplay", "MyOnAdminContextMenuShow");
function MyOnAdminContextMenuShow(&$oAdminList)
{
/**
* $type - тип кода инфоблока, например news, events и т.д.
* $iblock - идентификатор инфоблока
*
* Если интересует каталог, то вместо tbl_iblock_list_ нужно использовать tbl_product_list_
*/
if ( $oAdminList->table_id == "tbl_iblock_list_".md5($type.".".$iblock) )
{
// полезные действия
}
}
?>
AddEventHandler("main", "OnAdminListDisplay", "MyOnAdminContextMenuShow");
function MyOnAdminContextMenuShow(&$oAdminList)
{
/**
* $type - тип кода инфоблока, например news, events и т.д.
* $iblock - идентификатор инфоблока
*
* Если интересует каталог, то вместо tbl_iblock_list_ нужно использовать tbl_product_list_
*/
if ( $oAdminList->table_id == "tbl_iblock_list_".md5("structure.4") )
{
$arActions = $oAdminList->arActions;
$arActions['alert'] = 'Ругаться!';
$oAdminList->AddGroupActionTable($arActions);
}
}
AddEventHandler("main", "OnAfterEpilog", "iblockAlert");
function iblockAlert()
{
$oRequest = \Bitrix\Main\Application::getInstance()->getContext()->getRequest();
// Проверяем, что работает только в админке
if ( $oRequest->isAdminSection() )
{
if (
// Интересуют только интерактивные запросы
$oRequest->get('mode')=='frame'
// Где передана переменна IBLOCK_ID
&& $oRequest->get('IBLOCK_ID')==4
// Соответствующие нашему action
&& $oRequest->get('action')=='alert'
)
{
/**
* Вот тут можно сделать что угодно
* Можно получить выделенные ID
* через $oRequest->get('ID')
* Если он пуст, значит действие на всех элементах инфоблока
*/
}
}
}
all = {
"2017-08-10": 10,
"2017-08-11": 11,
"2017-08-12": 12,
"2017-08-13": 13,
"2017-08-14": 14
};
register = {
"2017-08-10": 10,
"2017-08-11": 11,
"2017-08-12": 12,
"2017-08-13": 13,
"2017-08-14": 14
};
percent = {
"2017-08-10": 10,
"2017-08-11": 11,
"2017-08-12": 12,
"2017-08-13": 13,
"2017-08-14": 14
};
result = ["2017-08-10","2017-08-11","2017-08-12","2017-08-13","2017-08-14"];
compact = [];
for (var i = 0; i < result.length; i++)
{
compact.push([i+1,all[result[i]],register[result[i]], percent[result[i]] ]);
}
console.log(Object.keys(compact).length)
console.log(compact.length)