$grouped = [];
foreach ($arr as $key => $items) {
$group = [
'UF_SUBJECT' => $items[0]['UF_SUBJECT'],
'UF_QUANTITY' => 0,
'UF_BRAK' => 0,
'UF_WAREHOUSENAME' => [],
];
foreach ($items as $item) {
$group['UF_QUANTITY'] += $item['UF_QUANTITY'];
$group['UF_BRAK'] += $item['UF_BRAK'];
$group['UF_WAREHOUSENAME'][] = $item['UF_WAREHOUSENAME']." (".$item['UF_QUANTITY']." шт)";
}
$group['UF_WAREHOUSENAME'] = implode(', ', $group['UF_WAREHOUSENAME']);
$grouped[$key] = $group;
}
// Ответ на нажатие кнопок
function send_answerCallbackQuery($token, $callback_query_id, $text, $show_alert){
file_get_contents("https://api.telegram.org/bot".$token."/answerCallbackQuery?callback_query_id=".$callback_query_id."&text=".$text."&show_alert=".$show_alert);
}
if (isset($data['callback_query'])) {
send_answerCallbackQuery($token, $data['callback_query']['id'], "проверка ", false);
}
... where fld like '%...%'
это самые плохие по скорости запросы, хотя не всегда это возможно без увеличения размера базы, вообще полнотекстовый поиск можно отдавать на откуп стороннему приложению (это может расширить возможности фильтрации), считай это еще одной формой индекса, хотя лучше данные по другому хранить. Я встречал ситуации когда в varchar хранили значения справочника из десятка значений, но делали по нему like %% что грузило базу прилично, когда как сделать простой комбобокс на порядок эффективнее и удобнее - поиск по подстроке лучше по справочнику делать на клиенте.select ... limit ...
на каждую страницу, а при смене фильтра запрашивать весь диапазон, но только идентификаторы, сохранив их либо в таблице на сервере либо на бакэенде, генерирующим запросы вида select ... id in (...)
, последнее если количество записей не больше тысяч. Кстати именно постраничная навигация с прогруженным списком id самая шустрая$result = \Bitrix\Sale\Internals\OrderChangeTable::getList(array(
'order'=>array('DATE_CREATE'=>'DESC','ID'=>'DESC'),
'filter'=>array('ORDER_ID'=>1319)
));
public static function getManagerLogItems()
{
return array(
"ORDER_SYNCHRONIZATION_IMPORT",
"ORDER_SYNCHRONIZATION_EXPORT",
"ORDER_SYNCHRONIZATION_EXPORT_ERROR",
"ORDER_ADDED",
"ORDER_DEDUCTED",
"ORDER_MARKED",
"ORDER_RESERVED",
"ORDER_CANCELED",
"ORDER_COMMENTED",
"ORDER_STATUS_CHANGED",
"ORDER_DELIVERY_ALLOWED",
"ORDER_DELIVERY_DOC_CHANGED",
"ORDER_PAYMENT_SYSTEM_CHANGED",
"ORDER_PAYMENT_VOUCHER_CHANGED",
"ORDER_DELIVERY_SYSTEM_CHANGED",
"ORDER_PERSON_TYPE_CHANGED",
"ORDER_PAYED",
"ORDER_TRACKING_NUMBER_CHANGED",
"ORDER_USER_DESCRIPTION_CHANGED",
"ORDER_PRICE_DELIVERY_CHANGED",
"ORDER_PRICE_CHANGED",
"ORDER_RESPONSIBLE_CHANGE",
"BASKET_ADDED",
"BASKET_REMOVED",
"BASKET_QUANTITY_CHANGED",
"BASKET_PRICE_CHANGED",
"PAYMENT_ADDED",
"PAYMENT_REMOVED",
"PAYMENT_PAID",
"PAYMENT_SYSTEM_CHANGED",
"PAYMENT_VOUCHER_CHANGED",
"PAYMENT_PRICE_CHANGED",
"SHIPMENT_ADDED",
"SHIPMENT_REMOVED",
"SHIPMENT_ITEM_BASKET_ADDED",
"SHIPMENT_ITEM_BASKET_REMOVED",
"SHIPMENT_DELIVERY_ALLOWED",
"SHIPMENT_SHIPPED",
"SHIPMENT_MARKED",
"SHIPMENT_RESERVED",
"SHIPMENT_CANCELED",
"SHIPMENT_STATUS_CHANGED",
"SHIPMENT_DELIVERY_DOC_CHANGED",
"SHIPMENT_TRACKING_NUMBER_CHANGED",
"SHIPMENT_PRICE_DELIVERY_CHANGED",
"SHIPMENT_AMOUNT_CHANGED",
"SHIPMENT_QUANTITY_CHANGED",
"SHIPMENT_RESPONSIBLE_CHANGE",
"ORDER_UPDATE_ERROR",
"BASKET_ITEM_ADD_ERROR",
"BASKET_ITEM_UPDATE_ERROR",
"SHIPMENT_ADD_ERROR",
"SHIPMENT_UPDATE_ERROR",
"SHIPMENT_ITEM_ADD_ERROR",
"SHIPMENT_ITEM_UPDATE_ERROR",
"SHIPMENT_ITEM_STORE_ADD_ERROR",
"SHIPMENT_ITEM_STORE_UPDATE_ERROR",
"SHIPMENT_ITEM_BASKET_ITEM_EMPTY_ERROR",
);
}
main
можно. Главное чтобы видимым был только 1. A document must not have more than one main element that does not have the hidden attribute specified.
В документе не должно быть более одного элементаmain
, для которого не указан атрибутhidden
.
main
, но все кроме одного должны быть скрыты с помощью атрибута hidden
h1
(Как бы можно использовать несколько в разных семантических секциях, но в итоге не особо это пошло и придерживаются правила по старинке. Что не более одного на страницу)nav
тоже стоит использовать осторожно, если нет понимания как делать правильно, то лучше придерживаться одного на страницу. article
.header
, nav
и footer
$schedule = [
'weekdays' => [
1 => [[0, 24]],
2 => [[0, 24]],
...
7 => [[0, 6], [8, 24]]
],
'dates' => [
'2020-12-31' => [[0, 6], [8, 17]],
'2021-01-01' => [[0, 0]],
'2020-01-02' => [[10, 23]],
...
]
];
function isWorkTime($schedule) {
$date = date('Y-m-d');
$weekday = intval(date('N'));
$hour = intval(date('H'));
$daySchedule = $schedule['weekdays'][$weekday];
if (array_key_exists($date, $schedule['dates']]) {
$daySchedule = $schedule['dates'][$date];
}
foreach ($daySchedule as $workTime) {
if ($hour >= $workTime[0] && $hour < $workTime[1]) {
return true;
}
}
return false;
}
if($arResult['ITEMS']) {
$arResult['FILE_TYPES'] = $filmTypes = [];
foreach($arResult['ITEMS'] as $key => $arItem) {
$filmTypesProp = isset($arItem['DISPLAY_PROPERTIES']['FILM_TYPES']) ? $arItem['DISPLAY_PROPERTIES']['FILM_TYPES'] : false;
$value = $filmTypesProp && $filmTypesProp['VALUE'] ? $filmTypesProp['VALUE'] : false;
$displayValue = $filmTypesProp && $filmTypesProp['DISPLAY_VALUE'] ? $filmTypesProp['DISPLAY_VALUE'] : false;
if($value && $displayValue) {
$filmTypes['VALUE'][] = $value;
$filmTypes['DISPLAY_VALUE'][] = $displayValue;
}
}
$arResult['FILE_TYPES'] = [
'VALUE' => array_values(array_unique($filmTypes['VALUE'])),
'DISPLAY_VALUE' => array_values(array_unique($filmTypes['DISPLAY_VALUE'])),
];
}
<?if(isset($arResult['FILE_TYPES']) && $arResult['FILE_TYPES']):?>
<select class="drop" id="regionDropdown">
<option value="All">Показать все</option>
<?foreach($arResult['FILE_TYPES']['DISPLAY_VALUE'] as $value):?>
<option value="<?=$value;?>"><?=$value;?></option>
<?endforeach;?>
</select>
<?endif;?>