SEL ECT TABLE_NAME FR OM information_schema.TABLES where TABLE_SCHEMA =DATABASE() and ENGINE = 'ROCKSDB' |
Сделать возможность настраивать активность элементов инфоблока для периодической активации как это делают в программаторах (таймерах) времени.
Например: элемент инфоблока активен в определенные дни года, месяца или недели. Идеально на календаре помечать периоды (дни) когда элемент активен.
Позволит выводить элементы инфоблока с нужной (установленной) периодичностью.
Реальный пример:
Инфоблок "Режим работы библиотеки" - Элементы: Режимы работ отделов и прочие сообщения о режимах работы
1. Летний режим работы - показывается с 15 мая по 31 августа
2. Зимний режим работы - показывается с 1 сентября по 14 мая
3. Информация о санитарном дне - отображается в последний четверг месяца и день перед ним
4. Сообщения о работе в праздничные дни - показ в дни праздников и 3 дня перед ними
public function continueIndex($interval = 0) { if ($interval > 0) $endTime = microtime(true) + $interval; else $endTime = 0; $indexedCount = 0; if ($this->lastElementId === null) $lastElementId = $this->storage->getLastStoredElementId(); else $lastElementId = $this->lastElementId; $elementList = $this->getElementsCursor($lastElementId); while ($element = $elementList->fetch()) { $this->indexElement($element["ID"]); <----------- $indexedCount++; $this->lastElementId = $element["ID"]; if ($endTime > 0 && $endTime < microtime(true)) break; } return $indexedCount; } |
public function indexElement($elementId) { $element = new Element($this->iblockId, $elementId); $element->loadFromDatabase(); $elementSections = $element->getSections(); $elementIndexValues = $this->getSectionIndexEntries($element); foreach ($element->getParentSections() as $sectionId) <------------- { foreach ($elementIndexValues as $facetId => $values) <------------- { foreach ($values as $value) <------------- { $this->storage->addIndexEntry( $sectionId, $elementId, $facetId, $value["VALUE"], $value["VALUE_NUM"], in_array($sectionId, $elementSections) ); } } } foreach ($elementIndexValues as $facetId => $values) { foreach ($values as $value) { $this->storage->addIndexEntry( 0, $elementId, $facetId, $value["VALUE"], $value["VALUE_NUM"], empty($elementSections) ); } } } |
public function addIndexEntry($sectionId, $elementId, $facetId, $value, $valueNum, $includeSubsections) { $connection = \Bitrix\Main\Application::getConnection(); try { $connection->query(" <----------- INS ERT IN TO ".$this->getTableName()." ( SECTION_ID ,ELEMENT_ID ,FACET_ID ,VALUE ,VALUE_NUM ,INCLUDE_SUBSECTIONS ) VALUES ( ".intval($sectionId)." ,".intval($elementId)." ,".intval($facetId)." ,".intval($value)." ,".doubleval($valueNum)." ,".($includeSubsections > 0? 1: 0)." ) "); } catch (\Bitrix\Main\DB\SqlException $e) { return false; } return true; } |