public static function getTags(array $requestTags): array
{
$tags = [];
foreach ($requestTags as $tag) {
if (is_numeric($tag)) {
$tags[] = $tag;
} else {
$newTag = Tag::upsert(['name' => $tag]);
$tags[] = $newTag->id;
}
}
return $tags;
}
function mapTags( array &$value )
{
if ( is_numeric($value) )
{
return $value;
}
$newTag = Tag::upsert(['name' => $tag]);
return $newTag->id;
}
public static function getTags( array $requestTags ): array
{
return array_map('mapTags', $requestTags);
}
public static function getTags($requestTags): array
{
$tags = [];
if ( !$requestTags )
{
return $tags;
}
foreach ($requestTags as $tag) {
if (is_numeric($tag)) {
$tags[] = $tag;
} else {
$newTag = Tag::upsert(['name' => $tag]);
$tags[] = $newTag->id;
}
}
return $tags;
}
public static function getTags(array $requestTags): array
{
if ( empty($requestTags) )
{
return $requestTags;
}
$existedTags = array_filter($requestTags, 'is_numeric');
$newTags = array_diff($requestTags, $existedTags);
/**
* Тут единый batch-метод который отправляет
* 1 запрос на все теги сразу.
* В results - массив Tag, обработанных batch-методом
*/
foreach ($results as $tag)
{
$existedTags[] = $tag->id;
}
return array_unique($existedTags);
}
при входящем звонке показ истории звонков и заявок с этого номера
Поиск заявок по адресу
отслеживания статуса заявок
переадресация заявок на ответственных лиц
• Задание решить с помощью включаемых областей.
• Реализовать возможность администратору сайта указывать текст в блоке Полезная информация без необходимости редактироваться исходный код.
• Должна быть возможность указывать разный текст для разных разделов сайта.
• Верстка, реализующая «каркас» блока, не должна быть в файле, который содержит редактируемый администратором текст. Это позволит минимизировать возможность «поломки» шаблона сайта.
use \Bitrix\Catalog;
$arStore = Catalog\StoreTable::getRow([
'select' => ['TITLE'],
'filter' => [
'ID' => $iStoreId,
]
]);
if ( $arStore )
{
// В $arStore['TITLE'] название
}
else
{
// Склад не найден
}
Обработчики событий лучше группировать в одном файле и тщательно аннотировать где они используются и какая задача перед ними стоит.
/**
* - /local/classes/{Path|raw}/{*|raw}.php
* - /local/classes/{Path|ucfirst,lowercase}/{*|ucfirst,lowercase}.php
*/
spl_autoload_register(function($sClassName)
{
$sClassFile = __DIR__.'/classes';
if ( file_exists($sClassFile.'/'.str_replace('\\', '/', $sClassName).'.php') )
{
require_once($sClassFile.'/'.str_replace('\\', '/', $sClassName).'.php');
}
$arClass = explode('\\', strtolower($sClassName));
foreach($arClass as $sPath )
{
$sClassFile .= '/'.ucfirst($sPath);
}
$sClassFile .= '.php';
if (file_exists($sClassFile))
{
require_once($sClassFile);
}
});
/**
* File with event handlers
*/
require_once(__DIR__.'/events.php');
$eventManager = \Bitrix\Main\EventManager::getInstance();
/**
* For new core of bitrix use
* $eventManager->addEventHandler( #module#, #handler#, [#namespace#, #function#]);
*
* For old core of bitrix use
* $eventManager->addEventHandlerCompatible( #module#, #handler#, [#namespace#, #function#]);
*/
$eventManager->addEventHandlerCompatible("module", "event", ['\\Project\\Module\\Event\\Handler', 'onEvent']);
В один из прекрасных дней перестал делаться бекап битрикса - точней делается бекап только sql -www.site.ru_20180309_051402_full_c8dd87.sql.
Проблема номер 2 - не могу зайти в админку. Просто рефрешится страница с логином. Обновлял, сбрасывал кеш, заходил под разными ip - не заходит.
<div class="currency">
<ul>
<? foreach ($obj as $element):?>
<? $color = ($element['percent_change_24h'] > 0) '#4ac06a' : '#ff8d8d'; ?>
<? $plus = ($element['percent_change_24h'] > 0) '+' : ''; ?>
<li>
<i class="cc <?=$element["symbol"];?> iconsi" title="<?=$element["name"];?>"></i>
<div class="block_coin">
<span class="coin_name"><?=$element["name"];?></span>
<span style="color: '<?=$color;?>';" class="coin_price"><?=$element['price_usd'];?></span>
<span style="color: '<?=$color;?>';" class="coin_change">(<?=$plus;?><?=$element["percent_change_24h"];?>%)</span>
</div>
</li>
<? endforeach; ?>
</ul>
</div>
Цикл foreach создаёт копию полученного массива. Если вы имеете дело с большими объёмами данных, такой подход не годится по очевидной причине: снижение производительности. Итератор SPL работает по другому: он обрабатывает один элемент итерируемого списка за раз, делая это куда более эффективно, нежели foreach.
При создании поставщиков данных (data providers) итераторы помогают сделать их более эффективными, предлагаю возможности ленивой загрузки (lazy loading). «Ленивая загрузка» означает то, что фактическое получение данных из источника выполняет только тогда, когда эти данные нужны. Помимо прочего, вы получаете возможность трансформации данных перед тем, как отдавать их клиенту объекта.
BX.ajax.runComponentAction('colobot:reviews::getList',{
// .. параметры которые будут отправлены в метод getListAction
// компонента reviews в пространстве имен colobot
}).then(function(){
// .. полезные действия
});
$query = mysqli_query($con, "INSERT INTO sales (name, color, adress, tel) VALUES (`{$name}`, `{$color}`, `{$adress}`, `{$tel}`)");
if ( !$query )
{
var_dump(mysqli_error($con));
}