preg_match('#\/catalog\/([\w\-]+)\/([\w\-]+)\/#', $APPLICATION->GetCurPage())
$currentSection = \Bitrix\Iblock\SectionTable::getById(SECTION_ID)->fetchObject();
$parentRootSection = \Bitrix\Iblock\SectionTable::getList([
'filter' => \Bitrix\Main\ORM\Query\Query::filter()
->where('IBLOCK_ID', $currentSection->getIblockId())
->where('LEFT_MARGIN', '<', $currentSection->getLeftMargin())
->where('RIGHT_MARGIN', '>', $currentSection->getRightMargin())
->where('DEPTH_LEVEL', 1),
])->fetchObject();
var_dump($parentRootSection->getName());
if (isset($_REQUEST[$arParams["ACTION_VARIABLE"]]) && isset($_REQUEST[$arParams["PRODUCT_ID_VARIABLE"]]))
{
if(isset($_REQUEST[$arParams["ACTION_VARIABLE"]."BUY"]))
$action = "BUY";
elseif(isset($_REQUEST[$arParams["ACTION_VARIABLE"]."ADD2BASKET"]))
$action = "ADD2BASKET";
else
$action = strtoupper($_REQUEST[$arParams["ACTION_VARIABLE"]]);
...
[
'CONDITION' => '#^/sef_folder/(\d+)-(\d+)/#',
'RULE' => 'sectionId=$1&elementId=$2',
'ID' => '',
'PATH' => '/sef_folder/index.php',
'SORT' => 100,
],
var_dump(\Bitrix\Main\Context::getCurrent()->getRequest()->get('sectionId'));
var_dump(\Bitrix\Main\Context::getCurrent()->getRequest()->get('elementId'));
$fileId = $DB->LastID();
)global $USER;
file_put_contents($pathToLogFile, $USER->GetID() . '|' . $fileId, FILE_APPEND | LOCK_EX);
\Bitrix\Main\EventManager::getInstance()->addEventHandler('main', 'OnAfterFileSave', 'processEvent');
protected function checkLastModified($element)
{
if ($this->arParams['SET_LAST_MODIFIED'])
{
$time = DateTime::createFromUserTime($element['TIMESTAMP_X']);
if (
!isset($this->arResult['ITEMS_TIMESTAMP_X'])
|| $time->getTimestamp() > $this->arResult['ITEMS_TIMESTAMP_X']->getTimestamp()
)
{
$this->arResult['ITEMS_TIMESTAMP_X'] = $time;
}
}
}
protected function initMetaData()
{
...
if ($this->arParams['SET_LAST_MODIFIED'] && $this->arResult['ITEMS_TIMESTAMP_X'])
{
Main\Context::getCurrent()->getResponse()->setLastModified($this->arResult['ITEMS_TIMESTAMP_X']);
}
}
В примере выше видно принципиальное преимущество объектной модели перед массивами. Несмотря на то, что фактически выбрано две записи (для одного Издателя нашлось две книги), по факту из результата получается только один объект. Система самостоятельно распознала этот случай и склеила все книги издателя в одну Коллекцию.
$objListOfDoctors = ElementDoctorsAPITable::getList([
'select' => [
'ID',
'NAME',
'SERVICESLIST.ELEMENT',
],
'filter' => ['ID' => $arParams['LIST_OF_DOCTOR'], 'ACTIVE' => 'Y'],
'order' => ['DATE_CREATE' => 'ASC'],
])->fetchCollection();
foreach ($objListOfDoctors as $doctor) {
foreach ($doctor->getServiceslist() as $service) {
var_dump($service->getElement()->getId());
var_dump($service->getElement()->getName());
...
}
// или
var_dump($doctor->getServiceslist()->getIdList());
}
\Bitrix\Main\ORM\Query\QueryHelper::decompose()
# created — timestamp
delete from usertable where status = 'notverified' and created < date_sub( now( ), interval 1 minute );
use Bitrix\Main\Event;
use Bitrix\Main\EventResult;
use Bitrix\Iblock\Template\Functions\FunctionBase;
(\Bitrix\Main\EventManager::getInstance())
->addEventHandler('iblock', 'OnTemplateGetFunctionClass', 'getFunctionClass');
function getFunctionClass(Event $event): EventResult
{
$parameters = $event->getParameters();
$functionClass = __NAMESPACE__ . '\\' . $parameters[0];
if (!class_exists($functionClass)) {
return new EventResult(EventResult::UNDEFINED);
}
return new EventResult(EventResult::SUCCESS, $functionClass);
}
class spell extends FunctionBase
{
// Вывод чисел с морфологией («рубль», «рубля», «рублей»)
// 321 {=spell 321 "товар" "" "а" "ов"} {=spell 321 "остал" "ся" "ось" "ось"} на складе
// 321 товар остался на складе
// number - свойство, содержащее число
// {=this.property.number} {=spell {=this.property.number} "товар" "" "а" "ов"} {=spell {=this.property.number} "остал" "ся" "ось" "ось"} на складе
public function calculate(array $parameters)
{
$n = intval($parameters[0]);
$word = strval($parameters[1]);
$forms[] = strval($parameters[2]);
$forms[] = strval($parameters[3]);
$forms[] = strval($parameters[4]);
$p = $n % 10 == 1 && $n % 100 != 11
? $forms[0]
: ($n % 10 >= 2 && $n % 10 <= 4
&& ($n % 100 < 10
|| $n % 100 >= 20) ? $forms[1] : $forms[2]);
return $n . ' ' . $word . ($forms[$p] ? $forms[$p] : end($forms));
}
}
в добавок при создании курса нету кнопки запросить курс.
$showGetRate = ($baseCurrency != '' && in_array($baseCurrency, array('RUB', 'BYR', 'BYN', 'UAH')));
откуда-то подтягиваются и как-то считаются, где и как?
if (!($currencyAgent = $agentIterator->Fetch())) {
Currency\CurrencyManager::updateBaseRates();
$checkDate = Main\Type\DateTime::createFromTimestamp(strtotime('tomorrow 00:01:00'));
CAgent::AddAgent('\Bitrix\Currency\CurrencyManager::currencyBaseRateAgent();', 'currency', 'Y', 86400, '', 'Y', $checkDate->toString(), 100, false, true);
}
$result = \Bitrix\Iblock\Iblock::wakeUp($iblockId)
->getEntityDataClass()::getByPrimary($elementId, ['select' => ['IBLOCK_SECTION_ID']])
->fetchObject()
->setIblockSectionId($sectionId)
->save();
if (!$result->isSuccess()) {
var_dump($result->getErrorMessages());
}
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
// подключаем тёмную цветовую схему (dark-color.css)
}
:root {
--main-bg-color: brown;
}
:root {
--main-bg-color: tomato;
}
body {
background-color: var(--main-bg-color);
}
:root {
--main-bg-color: brown;
}
@media (prefers-color-scheme: dark) {
:root {
--main-bg-color: tomato;
}
}
body {
background-color: var(--main-bg-color);
}