[URL=http://dev.1c-bitrix.ru/support/faq/8370/#112805]Вместо содержимого страницы вижу белый экран[/URL]
01.12.2014 23:19:51
[QUOTE]Алексей Воронин написал:
Данный код можно поместить в \bitrix\modules\main\include\prolog_after.php, заменив им фрагмент: [/QUOTE] Мне на одном проекте тоже пришлось делать такую же хрень. Модифицировать ядро, как вы, я не стал, ограничился событиями. В init.php:[CODE]// обработка If-Modified-Since AddEventHandler('main', 'OnEpilog', array('CBDPEpilogHooks', 'CheckIfModifiedSince')); class CBDPEpilogHooks { function CheckIfModifiedSince() { GLOBAL $lastModified; if ($lastModified) { header('Last-Modified: '.gmdate('D, d M Y H:i:s', $lastModified).' GMT'); $arr = apache_request_headers(); foreach ($arr as $header => $value) { if ($header == 'If-Modified-Since') { $ifModifiedSince = strtotime($value); if ($ifModifiedSince > $lastModified) { $GLOBALS['APPLICATION']->RestartBuffer(); CHTTP::SetStatus('304 Not Modified'); } } } } } } [/CODE](будет работать только в апаче из-за использования сервер-специфичной функции apache_request_headers()) Смысл, надеюсь, понятен. Сначала проверяем, задана ли глобальная переменная $lastModified. Если она задана, то отдаём заголовок Last-Modified. Потом смотрим, есть ли в запросе заголовок If-Modified-Since. Если он есть и он больше даты последнего изменения, отдаём пустую страницу со статусом 304 Not Modified. Это половина апельсина. Вторая половина -- задать переменную $lastModified. Применительно к странице детального просмотра элемента это может выглядеть так: 1) в result_modifier.php шаблона компонента детального просмотра сохраняем TIMESTAMP_X в кеше компонента:[CODE]$cp = $this->__component; // объект компонента if (is_object($cp)) $cp->SetResultCacheKeys(array('TIMESTAMP_X')); [/CODE]2) в component_epilog.php того же шаблона определяем переменную $lastModified[CODE]GLOBAL $lastModified; if (!$lastModified) $lastModified = MakeTimeStamp($arResult['TIMESTAMP_X']); else $lastModified = max($lastModified, MakeTimeStamp($arResult['TIMESTAMP_X'])); [/CODE] [QUOTE]sheppord написал: одни говорят, если правильно настроить Last-Modified, то снижается нагрузка на сервер, [/QUOTE] Это говорят сеошники. Такое было актуально лет 20 назад, когда сайты по большей части состояли из статических html-страниц, лежащих на диске. То, что сеошники до сих пор говорят об этом, очень ярко характеризует их опыт, знания, кругозор, интеллект и общий уровень развития. |
|
|
01.12.2014 22:54:11
[QUOTE]Константин Грибов написал:
Можно ли реализовать подобное в 1С-Битрикс?[/QUOTE] Да и нет. Если у элемента есть привязка к нескольким разделам, а в настройках инфоблока для формирования урла страницы детального просмотра использован SECTION_ID или SECTION_CODE, то урл всегда будет выглядеть одинаково. Т.е. для формирования урла будет использоваться один и тот же раздел. Но это неуправляемо. В битриксе нет возможности задать "главную категорию". Точнее, есть, но не очень удобная: при создании элемента нужно сделать привязку к "главной категории", сохранить его, а потом добавить привязки к остальным разделам. |
|
|
01.12.2014 22:35:30
[QUOTE]Julliet написал:
Алексей Федоренко ,можно использовать [URL=http://dev.1c-bitrix.ru/api_help/iblock/events/onbeforeiblockelementadd.php]обработчик на событие[/URL] .[/QUOTE] Нет, если название элемента пустое, до этого обработчика дело не дойдёт. Можно использовать вот это событие: [URL=http://dev.1c-bitrix.ru/api_help/iblock/events/OnStartIBlockElementAdd.php]http://dev.1c-bitrix.ru/api_help/iblock/events/OnStartIBlockElementAdd.php[/URL] |
|
|
29.11.2014 00:49:29
[QUOTE]Сергей Эстрин написал:
У вас файл 222.php подключается в файле 1111.php через include или require? Или вы хотите между независимыми файлами передавать? Если между независимыми, то можете, например, использовать механизм сессий (глобальная переменнная $_SESSION).[/QUOTE] Подозреваю, что через <a href="222.php"> |
|
|