marazm_ua 10 Опубликовано: 10 января 2014 Рассказать Опубликовано: 10 января 2014 Здравствуйте. В связи с необходимостью вставить в новость форму и обработчик была выявлена неприятность кеширования с {include} в коротких новостях, которую каждый может промоделировать у себя. 1. Создаем файлик вывода времени или чего-либо меняющегося now.php в engine/modules: <? echo 'Сейчас: '.date('H:i:s'); ?> 2. Подключаем его в шаблоны короткой и полной новости в любом месте: {include file="engine/modules/now.php"}[/code] 3. Заливаем на сайт now.php, шаблоны короткой и полной новости, чистим кеш (кеширование файловое должно быть включено). 4. Когда будем заходить [b]несколько раз [/b]в категории с выдачей коротких новостей, то заметим, что [b]время остановилось(!) [/b]и изменится только при след. именении кеша. Периодичности не знаю, наверное минут 5. 5. [b]В полных новостях время идет себе дальше[/b], несмотря на кеширование, а вот короткие новости с багами. Очевидно, что {include} нуждается в опции cashe="no" по аналогии с custom? Еще вопрос к разработчикам: "Как определить название файла кеша коротких новостей, и полных также. new_*.tmp, алгоритм?" Ссылка на сообщение Поделиться на других сайтах
Lomot 134 Опубликовано: 10 января 2014 Рассказать Опубликовано: 10 января 2014 В чем баг? В новостях include это баг(!!!) - для этого делают статику.. Новости должны показывать одно и тоже, за тем и кешируються. Это новость, она не меняется от действий пользователя! Алле, ребята. Если нужно форму вставить именно в новость, могу предложить вставлять именно форму, а не include. Хотя честно скажу, не понимаю зачем именно в новость вставлять форму. Вставляем в новость и action у формы куда нужно.. или реализовать это все аяксом, что мне кажется самым верным путем. Я формы(да да той самой)) не видел, но думаю из-за неё не стоит внедрять новые алгоритмы в DLE(вот прям ни строчки ради этого, без обид). Ссылка на сообщение Поделиться на других сайтах
marazm_ua 10 Опубликовано: 11 января 2014 Рассказать Опубликовано: 11 января 2014 Автор В чем баг? Баг в том, что полная и короткая новость обрабатывают инклуде по-разному! Это нормально, когда один код работает по-разному? И предлжите, плиз, рабочий рецепт как вставить форму в короткую новость И почему бы пользователям не дать возможность обновлять новость, а не только комментировать? Кроме того у кого новости, а у кого и целые статьи и хотелось бы дополнения от пользователя видеть через свой модуль. Типа Википедии на DLE. Или электронный магазин на базе новостей может работать без форм? Ссылка на сообщение Поделиться на других сайтах
alex32 944 Опубликовано: 11 января 2014 Рассказать Опубликовано: 11 января 2014 Краткие новости берутся из кэша. Отключайте кэш на сайте, тогда и "модуль" будет работать так, как вам надо. Ссылка на сообщение Поделиться на других сайтах
celsoft 6242 Опубликовано: 11 января 2014 Рассказать Опубликовано: 11 января 2014 Баг в том, что полная и короткая новость обрабатывают инклуде по-разному! Это нормально, когда один код работает по-разному? И предлжите, плиз, рабочий рецепт как вставить форму в короткую новость Какой же это баг, это не баг, это разная работа кеширования для обеспечения максимальной производительности и при этом функциональности самого DLE. При показе кратких новостей он кеширует уже сформированный HTML код всех новостей. А при просмотре полной новости он кеширует только результаты запроса к БД, а не сформированный HTML. И все это потому что при показе полной новости из БД берется одна новость и для нее целесообразно кешировать результаты выборки из БД, а при показе кратких новостей, может показываться большое количество новостей одновременно и кешировать только результаты запроса к БД, для этого нецелесообразно. Ссылка на сообщение Поделиться на других сайтах
marazm_ua 10 Опубликовано: 11 января 2014 Рассказать Опубликовано: 11 января 2014 Автор Какой же это баг, это не баг, это разная работа кеширования для обеспечения максимальной производительности и при этом функциональности самого DLE. А по-моему это баг. Код PHP пользователя не отрабатывается, а вы говорите не баг. Ну да ладно, если вам нравится то, что инклуде не работает в коротких новостях нормально при кешировании, то хоть предупредите про это людей в документации. Вы не ответили как имя файла кеша новости расшифровать? Ссылка на сообщение Поделиться на других сайтах
celsoft 6242 Опубликовано: 11 января 2014 Рассказать Опубликовано: 11 января 2014 А по-моему это баг. Код PHP пользователя не отрабатывается, а вы говорите не баг. Слово "кеширование" априори означает снижение нагрузки за счет того что сервер перестает обрабатывать определенные действия. Вы багом называете технологию, технологии не могут быть багом, они могут использоваться а могут не использоваться. DLE использует данную технологию для своих целей, для наибольшего обеспечения производительности. А вы пишите следующее: "сделайте DLE намного медленнее и потребляющим больше ресурсов, потому как мне нужно вставить мою форму, которую я вставляю неправильно и не обладаю знаниями как сделать чтобы и форма работала и кеширование". Ну да ладно, если вам нравится то, что инклуде не работает в коротких новостях нормально при кешировании, то хоть предупредите про это людей в документации. Какой документации? Кеширование это априори снижение нагрузки и невыполнение участков кодов. Писать об этом в инструкции, это тоже самое что в инструкции для еды писать "это еда, ее кладут в рот". Если вы решили заниматься программированием, то как минимум нужно знать и понимать базовые технологии, термины и обозначения. Неправильно пробелы в знаниях списывать на баги. Баг это ошибка. А здесь нет ошибок, значит нет багов. И я точно никогда не буду умышленно увеличивать нагрузку от DLE, из-за того что вы изначально неверно проектируете свои приложения. Проектирование приложения это самый важный этап в программировании, а вы решили: "все я ставлю форму именно так и именно туда, а все остальное это баги других и все равно что помимо меня есть сотни тысяч других сайтов, которые станут работать намного медленнее и потреблять больше ресурсов, только из-за меня, потому как у меня форма, которую я вставил, и не умею использовать localstorage для хранения введенных данных, а мне их нужно вывести только обязательно на PHP, который видите ли кешируется и не выполняется". Это в корне неправильное отношение с вашей стороны к проектированию. Все ваши проблемы решаются лишь правильным написанием вашего модуля и задействованием JS и localstorage для хранения того что человек ввел в форму или воспользоваться банальным AJAX.Кеширование и Real-Time выполнение это вещи принципиально несовместимые. Кеширование и делается чтобы убрать Real-Time выполнение, и вы вставляете "Real-Time выполнение" в область которая подлежит кешированию и хотите чтобы при этом "Real-Time выполнение" оставалось и кеширование оставалось. Это невозможно в принципе, и в данном случае баг только один это неверное проектирование выполнения реализуемой задачи, а не баг что DLE как то работает неправильно. DLE в данном работает абсолютно правильно, как он и был запрограммирован, на выполнение задачи по максимальному снижению нагрузки в данной области сайта. Ссылка на сообщение Поделиться на других сайтах
marazm_ua 10 Опубликовано: 11 января 2014 Рассказать Опубликовано: 11 января 2014 Автор Спасибо за огромный ответ на вопрос который я не задавал, ведь я описал свои мучения про которые меня вы не предупредили при обсуждении в Платной поддержке http://forum.dle-new...showtopic=65091 и предложил опцию ввести {include} cashe="no" по аналогии с custom. Ну ладно, Бог с вами, спрошу в третий раз "Как имя файла кеша новости расшифровать". И насчет "ошибок в проектировании" откуда мне знать, что в кешируемой полной новости {include} PHP выполняется, а в краткой - нет, можеть здесь "ошибка в проектировании", ведь в доках про это ни слова. Возможно причина в том, что кратких новостей на странице несколько. Как правило. Ссылка на сообщение Поделиться на других сайтах
marazm_ua 10 Опубликовано: 11 января 2014 Рассказать Опубликовано: 11 января 2014 Автор Кстати, наверное из-за этой проблемы нет и электронных магазинов, которые работают на базе новостей DLE, они вынуждены крутить свои базы. Кому приятно увидеть в кратком описании товара одну цену, а в полном - другую? Ссылка на сообщение Поделиться на других сайтах
celsoft 6242 Опубликовано: 11 января 2014 Рассказать Опубликовано: 11 января 2014 Кстати, наверное из-за этой проблемы нет и электронных магазинов, которые работают на базе новостей DLE, они вынуждены крутить свои базы. Кому приятно увидеть в кратком описании товара одну цену, а в полном - другую? Какое то странное у вас представление о программировании, вы думате что всe всё в новости пихают при разработке модулей. Новости и товары это как бы разные вещи, они должны быть в других таблицах БД, и показываться отдельными PHP кодами, а не вставляться в новости. Разработка электронного магазина это очень затратное мероприятие, которое стоит приличных денег и пользуется малым спросом. Потому как это разные целевые аудитории и тот кто делает себе сайты не DLE не продает тут же на сайте пылесосы или что то еще. Поэтому и не делают. Это экономически не целесообразно, а не потому что кеш в новостях Ссылка на сообщение Поделиться на других сайтах
marazm_ua 10 Опубликовано: 11 января 2014 Рассказать Опубликовано: 11 января 2014 Автор Спрошу я в четвертый раз "Как имя файла кеша новости расшифровать?". Ссылка на сообщение Поделиться на других сайтах
celsoft 6242 Опубликовано: 12 января 2014 Рассказать Опубликовано: 12 января 2014 Спрошу я в четвертый раз "Как имя файла кеша новости расшифровать?". Никак, потому что имя файла кеша не основано на конретной новости, т.к. это показ кратких новостей и кеш формируется на страницу, на которой эта краткая новость показывается в данный момент. И для разных разделов сайта это могут быть разные имена, даже с одним и тем же содержимым. Если хотите узнать хеш конкретной вашей страницы то вам нужно вывести в файле engine/engine.php перед строчкой: if ($cache_id < 6 and !isset ( $_POST['login'] )) $active = dle_cache ( "news", $cache_id . $cache_prefix, true ); [/CODE] написав [CODE] echo $cache_id . $cache_prefix; Но это предварительное значение которое еще дополняется группой и оборачивается в md5 Ссылка на сообщение Поделиться на других сайтах
marazm_ua 10 Опубликовано: 14 января 2014 Рассказать Опубликовано: 14 января 2014 Автор Спасибо за шифр. Но ведь движок как-то узнает что ему тянуть из кеша, занчит расшифровівает или как? Ссылка на сообщение Поделиться на других сайтах
Wanderers 17 Опубликовано: 14 января 2014 Рассказать Опубликовано: 14 января 2014 Спасибо за шифр. Но ведь движок как-то узнает что ему тянуть из кеша, занчит расшифровівает или как? Или как, если по простому, то формируется имя файла кеша и проверяется есть в наличии таковой или нет, если нет - создается с запросами к БД, если есть - выполняется без запросов к БД. Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Архивировано
Эта тема находится в архиве и закрыта для публикации сообщений.