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. Или электронный магазин на базе новостей может работать без форм? Изменено 11 января 2014 пользователем marazm_ua Цитата Ссылка на сообщение Поделиться на других сайтах
alex32 942 Опубликовано: 11 января 2014 Рассказать Опубликовано: 11 января 2014 Краткие новости берутся из кэша. Отключайте кэш на сайте, тогда и "модуль" будет работать так, как вам надо. Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 095 Опубликовано: 11 января 2014 Рассказать Опубликовано: 11 января 2014 Баг в том, что полная и короткая новость обрабатывают инклуде по-разному! Это нормально, когда один код работает по-разному? И предлжите, плиз, рабочий рецепт как вставить форму в короткую новость Какой же это баг, это не баг, это разная работа кеширования для обеспечения максимальной производительности и при этом функциональности самого DLE. При показе кратких новостей он кеширует уже сформированный HTML код всех новостей. А при просмотре полной новости он кеширует только результаты запроса к БД, а не сформированный HTML. И все это потому что при показе полной новости из БД берется одна новость и для нее целесообразно кешировать результаты выборки из БД, а при показе кратких новостей, может показываться большое количество новостей одновременно и кешировать только результаты запроса к БД, для этого нецелесообразно. Цитата Ссылка на сообщение Поделиться на других сайтах
marazm_ua 10 Опубликовано: 11 января 2014 Рассказать Опубликовано: 11 января 2014 (изменено) Автор Какой же это баг, это не баг, это разная работа кеширования для обеспечения максимальной производительности и при этом функциональности самого DLE. А по-моему это баг. Код PHP пользователя не отрабатывается, а вы говорите не баг. Ну да ладно, если вам нравится то, что инклуде не работает в коротких новостях нормально при кешировании, то хоть предупредите про это людей в документации. Вы не ответили как имя файла кеша новости расшифровать? Изменено 11 января 2014 пользователем marazm_ua Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 095 Опубликовано: 11 января 2014 Рассказать Опубликовано: 11 января 2014 А по-моему это баг. Код PHP пользователя не отрабатывается, а вы говорите не баг. Слово "кеширование" априори означает снижение нагрузки за счет того что сервер перестает обрабатывать определенные действия. Вы багом называете технологию, технологии не могут быть багом, они могут использоваться а могут не использоваться. DLE использует данную технологию для своих целей, для наибольшего обеспечения производительности. А вы пишите следующее: "сделайте DLE намного медленнее и потребляющим больше ресурсов, потому как мне нужно вставить мою форму, которую я вставляю неправильно и не обладаю знаниями как сделать чтобы и форма работала и кеширование". Ну да ладно, если вам нравится то, что инклуде не работает в коротких новостях нормально при кешировании, то хоть предупредите про это людей в документации. Какой документации? Кеширование это априори снижение нагрузки и невыполнение участков кодов. Писать об этом в инструкции, это тоже самое что в инструкции для еды писать "это еда, ее кладут в рот". Если вы решили заниматься программированием, то как минимум нужно знать и понимать базовые технологии, термины и обозначения. Неправильно пробелы в знаниях списывать на баги. Баг это ошибка. А здесь нет ошибок, значит нет багов. И я точно никогда не буду умышленно увеличивать нагрузку от DLE, из-за того что вы изначально неверно проектируете свои приложения. Проектирование приложения это самый важный этап в программировании, а вы решили: "все я ставлю форму именно так и именно туда, а все остальное это баги других и все равно что помимо меня есть сотни тысяч других сайтов, которые станут работать намного медленнее и потреблять больше ресурсов, только из-за меня, потому как у меня форма, которую я вставил, и не умею использовать localstorage для хранения введенных данных, а мне их нужно вывести только обязательно на PHP, который видите ли кешируется и не выполняется". Это в корне неправильное отношение с вашей стороны к проектированию. Все ваши проблемы решаются лишь правильным написанием вашего модуля и задействованием JS и localstorage для хранения того что человек ввел в форму или воспользоваться банальным AJAX.Кеширование и Real-Time выполнение это вещи принципиально несовместимые. Кеширование и делается чтобы убрать Real-Time выполнение, и вы вставляете "Real-Time выполнение" в область которая подлежит кешированию и хотите чтобы при этом "Real-Time выполнение" оставалось и кеширование оставалось. Это невозможно в принципе, и в данном случае баг только один это неверное проектирование выполнения реализуемой задачи, а не баг что DLE как то работает неправильно. DLE в данном работает абсолютно правильно, как он и был запрограммирован, на выполнение задачи по максимальному снижению нагрузки в данной области сайта. 1 Цитата Ссылка на сообщение Поделиться на других сайтах
marazm_ua 10 Опубликовано: 11 января 2014 Рассказать Опубликовано: 11 января 2014 (изменено) Автор Спасибо за огромный ответ на вопрос который я не задавал, ведь я описал свои мучения про которые меня вы не предупредили при обсуждении в Платной поддержке http://forum.dle-new...showtopic=65091 и предложил опцию ввести {include} cashe="no" по аналогии с custom. Ну ладно, Бог с вами, спрошу в третий раз "Как имя файла кеша новости расшифровать". И насчет "ошибок в проектировании" откуда мне знать, что в кешируемой полной новости {include} PHP выполняется, а в краткой - нет, можеть здесь "ошибка в проектировании", ведь в доках про это ни слова. Возможно причина в том, что кратких новостей на странице несколько. Как правило. Изменено 11 января 2014 пользователем marazm_ua Цитата Ссылка на сообщение Поделиться на других сайтах
marazm_ua 10 Опубликовано: 11 января 2014 Рассказать Опубликовано: 11 января 2014 Автор Кстати, наверное из-за этой проблемы нет и электронных магазинов, которые работают на базе новостей DLE, они вынуждены крутить свои базы. Кому приятно увидеть в кратком описании товара одну цену, а в полном - другую? Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 095 Опубликовано: 11 января 2014 Рассказать Опубликовано: 11 января 2014 Кстати, наверное из-за этой проблемы нет и электронных магазинов, которые работают на базе новостей DLE, они вынуждены крутить свои базы. Кому приятно увидеть в кратком описании товара одну цену, а в полном - другую? Какое то странное у вас представление о программировании, вы думате что всe всё в новости пихают при разработке модулей. Новости и товары это как бы разные вещи, они должны быть в других таблицах БД, и показываться отдельными PHP кодами, а не вставляться в новости. Разработка электронного магазина это очень затратное мероприятие, которое стоит приличных денег и пользуется малым спросом. Потому как это разные целевые аудитории и тот кто делает себе сайты не DLE не продает тут же на сайте пылесосы или что то еще. Поэтому и не делают. Это экономически не целесообразно, а не потому что кеш в новостях 2 Цитата Ссылка на сообщение Поделиться на других сайтах
marazm_ua 10 Опубликовано: 11 января 2014 Рассказать Опубликовано: 11 января 2014 Автор Спрошу я в четвертый раз "Как имя файла кеша новости расшифровать?". Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 095 Опубликовано: 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 Спасибо за шифр. Но ведь движок как-то узнает что ему тянуть из кеша, занчит расшифровівает или как? Или как, если по простому, то формируется имя файла кеша и проверяется есть в наличии таковой или нет, если нет - создается с запросами к БД, если есть - выполняется без запросов к БД. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.