И на битриксе сейчас врублено кеширование... Как мне этот вывод сделать в обход кеша!? Как дать. Ему понять что например определённое место не кешировать. Ибо комментарии должны обнавляться ежесекундно как поступят. На аяксе обновление работает норм, но нужно чтобы ещё была индексация комментариев при загрузки страницы. И чё то как то не охото десятки тысяч товаров вручную бегать и осматривать а новый коммент то был или нет. И если был зайти и нажать обновить кеш страницы. Мне нужно пустить вывод комментов в обход кеша.
имя $key обычно используют в для ключей массива, например foreach ($arElementComments as $key => $arElementComment){
3) Все загружаемые файлы желательно вынести в upload, что бы вышло /upload/avatars/ Если файлы генерируються как кеш или миниатюры, их можно без вреда удалить и они не нужны в резервной копии, то в /upload/tmp/
Вы можете использовать управляемый кеш для своего компонента комментариев - кКеш компонента будет обновляться если были изменения данных (добавлен новый коммент). Вообще не кешировать блок комментариев - плохой вариант, но вы можете добавить вывод комментариев в component_epilog.php - он не кешируется у шаблонов компонентов
0. А зачем вам вообще их выводить на страницу?Не логичнее было бы после загрузки страницы выполнить аякс запрос и отобразить? Это же даст профит по скорости. 1. Страница кешируется не вся целиком, правильнее будет сказать кешируется "по компонентно". Я так понимаю вы эти комментарии на детальной странице товара показываете.т.е. компонент catalog.element. Вот в его шаблоне есть (если нет то можно создать) файл component_epilog.php этот код не будет кешироваться. Если в этом файле каких то данных будет не хватать, погуглите "как передать значение из result_modifier.php в component_epilog.php 3. Если уж вам хочется сразу при формировании страницы показать комментарии, а не переводить на аякс. То кешировать надо. А если у вас последний комментарий год назад? И кроме него и миллионы,на каждом хите запрос? Тут очень подходит механизм управляемого кеша и композит.
Dios написал: У Вас свои комменты, в своей таблице?
да
Цитата
Dios написал: 2) Именование переменных и функций желательно делать более осмысленным.
считаю что дал вполне осмысленные имена переведите дословно (Получить Комментарии Для Элемента) Ну да функцию назвать можно было и так getCommentsByVendorCodeForElement Ну или типа того
За это реальное спасибо перерыл доку не смог понять как сделать экранирвоание через sqlHelper на битриксе.
Цитата
Dios написал: 3) Все загружаемые файлы желательно вынести в upload, что бы вышло /upload/avatars/Если файлы генерируються как кеш или миниатюры, их можно без вреда удалить и они не нужны в резервной копии, то в /upload/tmp/
и за это спасибо
Цитата
Dios написал: 4) Что бы ваш код не кешировался, то он должны быть в не кешируемом файле, ваш кеп.например в component_epilog.php
не совсем понятно. Он же включается в самом конце скрипта а компонент подгружается до него
Леонид Диденко написал: Он же включается в самом конце скрипта а компонент подгружается до него
Это "часть" шаблона компонента. Если вам необходимо вставить "внутрь" верстки которая внутри шаблона - есть отложенные функции там же есть ссылка на статью в блоге
template.php кешируеться и точка, то есть он выполняеться один раз и все. Следственно Ваш код с комментариями должен быть в другом файле.
Вариантов валом например component_epilog.php. Да, он выполняеться после шаблона, но всегда.
Если ваш виджет не может идти после страницы, и должен быть в самой странице. То например в component_epilog.php может быть json с комментами. А ваш JS рендерит виджет на основе этого json. Но это не индексируеться, а желательно комменты индексировать с микроразметкой http://schema.org/AggregateRating для расширенных снипетов поиска.
Например, Вы можете в template.php использовать свой тег свободной формулировки например "<mycomments/>" или "%MY_COMMENTS%". Желательно что-то невидимое в случае сбоя. и заключить вызов самого компонента в ob_start(); ob_get_clean(); конструкцию с последующим str_replace("%MY_COMMENTS%", "html моего виджета", ob_get_clean()). Не знаю на сколько это канонично, на производительности не заметно и утечек памяти нету.
ajax после загрузки страницы считаеться нормальным, но мне не нравиться это решение, так как таких динамических областей бывает дофига, миникорзина, сравнение товаров, голосовалки, избранное и тд. А когда это множество виджетов собираеш в некую единую красивую и оптимизированную систему, то уже пишеш свой фреймверк, а там уже и до angular не далеко. Плюс это все таки нагрузка на пхп, а не nginx статика. Смысла я в этом вообще не вижу. Но все же это считаеться нормальным...
И все же выборку комментов желательно кешировать (или автокешировать в терминалогии битрикса). Что бы был сброс кеша при изменениях в таблице. И снова рекомендую использовать встроенные orm, он имеет свой функционал кеширования выборок из таблицы со сбросом при добавлении, обновлении и удалении
--- Не понятно как предлогаеться применить отложенные функции, ведь в \CBitrixComponentTemplate нету метода ShowViewContent. Из кешируемого компонента можно только захватить вывод через $this->SetViewTarget('MyComponentOutput'); ?>My html code <? $this->EndViewTarget(); и например в component_epilog.php этот вывод получить $APPLICATION->GetViewContent('MyComponentOutput');
Не вижу практического применения фишки.
Цитата
Из документации: Отложенные функции нельзя использовать в файлах шаблона компонента: template.php и result_modifier.php (так как результаты их выполнения кешируются).
Dios написал: Не понятно как предлогаеться применить отложенные функции,
Посыпаю голову пеплом - переклинило. В голове было про
Цитата
Dios написал: Вы можете в template.php использовать свой тег свободной формулировки например " " или "%MY_COMMENTS%". Желательно что-то невидимое в случае сбоя. и заключить вызов самого компонента в ob_start(); ob_get_clean(); конструкцию с последующим str_replace("%MY_COMMENTS%", "html моего виджета", ob_get_clean()). Не знаю на сколько это канонично, на производительности не заметно и утечек памяти нету
Минимизация вывода html довольно глупая затея, так как вебсервер имеет потоковое зжатие для текстового контента. По крайне мере вебсервер здорового человека.
Можно воспользоваться способом 2 из приведенной документации, а при добавлении/удалении коммента сбрасывать кеш по своему тегу. В принципе что-то похожее уже предлагали.
Да, RegisterTag гараздо красивей решение, в теге укажите id сущности для которой делаеться выборка комментариев, что бы не сбрасывался весь кеш каталога, при добавлении(изменении/удалении) коммента к любому товару. Хотя не уверен в производительности, когда у вас будет столько же тегов сколько товаров(1к/10к/100к/и более)
Я буду подгружать аяксом (т.есть для индексации я сделаю вывод нативный, а после загрузки переобновлю комменты аяксом просто), и сделаю крон на весь сайт будет раз в сутки обновлять кеш по всему сайту, а то это нажать обновить кеш меня угнетает.
Леонид Диденко написал: сделаю крон на весь сайт будет раз в сутки обновлять кеш по всему сайту, а то это нажать обновить кеш меня угнетает
Хотите чистить раз в сутки кеш? Плохая идея. Прочитайте про тегированный кеш - кеш будет чистится только тогда когда есть изменения, ну или если раньше по времени протухнет. Зачем тормозить работу сайта без необходимости.