0 Пользователей и 1 Гость просматривают эту тему.
  • 25 Ответов
  • 1226 Просмотров
*

x1

  • Давно я тут
  • 617
  • 15 / 0
  • Linux — это Windows для бытовой техники
Собственно вопросов два.
1) Есть ли смысл включать кэширование Joomla, если страницы обновляются от случая к случаю (меняется цена например) или вообще не обновляются в течение квартала?
2) При включении кэша в папке casche образовалась куча подпапок и файлов. При изменении страницы материала в броузере по прежнему отображается старая страница - поскольку она грузится из кэша сервера. Чистка кэша в броузере пользователем не помогает.
И как быть? Как обновить в кэше на хостинге только измененную страницу?
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
Собственно вопросов два.
1) Есть ли смысл включать кэширование Joomla, если страницы обновляются от случая к случаю (меняется цена например) или вообще не обновляются в течение квартала?
2) При включении кэша в папке casche образовалась куча подпапок и файлов. При изменении страницы материала в броузере по прежнему отображается старая страница - поскольку она грузится из кэша сервера. Чистка кэша в броузере пользователем не помогает.
И как быть? Как обновить в кэше на хостинге только измененную страницу?

1 если изменения происходят редко то кеш рекомендуется включить, влияет на скорость загрузки страницы
2 в админке есть кнопка сброса кеша, после изменений на сайте заходите и сбрасывайте, тем более если изменения происходят не часто
*

x1

  • Давно я тут
  • 617
  • 15 / 0
  • Linux — это Windows для бытовой техники
Да? Я бы здесь не спрашивал, если бы было так все просто. Нашел, где проблема описана более точно:
https://awesome-design.com/cms/joomla/k2-cache-i-bolshoe-kolichestvo-statej-oshibka-sohraneniya-izmeneniya-materialov/
В админке, в редактировании материала К2 нужна отдельная кнопка - "Обновить кєш", при нажатии на которую кєш текущей страницы удалялся бы. Или бы срабатывала функция очистки кэша после нажатия кнопки "Сохранить" ("Сохранить и закрыть").
Трудность в чем: Если во фронте страница материала не открывалась, то и в  кэше ее нет.
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
Да? Я бы здесь не спрашивал, если бы было так все просто. Нашел, где проблема описана более точно:
https://awesome-design.com/cms/joomla/k2-cache-i-bolshoe-kolichestvo-statej-oshibka-sohraneniya-izmeneniya-materialov/
В админке, в редактировании материала К2 нужна отдельная кнопка - "Обновить кєш", при нажатии на которую кєш текущей страницы удалялся бы. Или бы срабатывала функция очистки кэша после нажатия кнопки "Сохранить" ("Сохранить и закрыть").
Трудность в чем: Если во фронте страница материала не открывалась, то и в  кэше ее нет.

Могу дать готовое решение в виде вставки кода, работает без всяких кнопок, создали\изменили материал кеш - сброшен!
я распотрошил немного компонент com_cache и вытащил из него нужный кусок функционала.

открывайте /administrator/components/com_k2/controllers/item.php
и замените все его содержимое на это
PS я оставил комментарии, можно заменить как все содержимое так и только те куски где комментарий

Спойлер
[свернуть]

но можно вывести и кнопку но зачем
« Последнее редактирование: 04.03.2019, 01:10:20 от SalityGEN »
*

x1

  • Давно я тут
  • 617
  • 15 / 0
  • Linux — это Windows для бытовой техники
На сайте не сработало. Буду смотреть на локал.
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
На сайте не сработало. Буду смотреть на локал.
я вчера вечером содержимое спойлера менял! была ошибка, но новые изменения на своем сайте проверил, работает, чистит папку /cache в корне сайта
*

x1

  • Давно я тут
  • 617
  • 15 / 0
  • Linux — это Windows для бытовой техники
Страница кэшируется в двух файлах в папке cache/com_k2, например:
Код
0faebb08dbf2c5221bbc22897e59bcc4-cache-com_k2-8d5f64a3b3273894607ecf54be8b916b.php
0faebb08dbf2c5221bbc22897e59bcc4-cache-com_k2-e03d6b0b46e9ce244c24a7fdfaedd10d.php
На локалке тоже не срабатывает.
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
Странно, но у меня работает...
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
А Версия Joomla какая? просто это на 3x
На 2х там немного по другому будет..
*

x1

  • Давно я тут
  • 617
  • 15 / 0
  • Linux — это Windows для бытовой техники
Проверил и на сайте и на локалке, не работает. Такого как у вас на видео - не происходит.
Чистка кэша броузера тоже не помогает.
joomla 3.9.3 SEF включен
И еще вопрос, удаляется весь кэщ в папке com_k2 или только кэш измененной страницы?
« Последнее редактирование: 04.03.2019, 13:40:29 от x1 »
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
Проверил и на сайте и на локалке, не работает. j 3.9.3 SEF включен
Код
echo (int) $clientId === 1 ? JPATH_ADMINISTRATOR . '/cache' : $conf->get('cache_path', JPATH_SITE . '/cache'); 
выдает:
Код
H:\OSPanel\domains\my-site.com\administrator/cache
там в цикле  $clientId - 0 и 1
0 - это корень сайта (клиентская часть)
1 - это корень в папке администратор (администраторская часть)
т.е функция вызывается 2 раза! с начала 1 потом 0
если поставить 0 то должно вывести
Код
$clientId = 0;
echo (int) $clientId === 1 ? JPATH_ADMINISTRATOR . '/cache' : $conf->get('cache_path', JPATH_SITE . '/cache');
Код
H:\OSPanel\domains\my-site.com\/cache
возможно проблема в правах на папку или слеше в части $conf->get('cache_path', JPATH_SITE . '/cache');

попробуйте на всякий заменить ту строку на эту
Код
$clientId === 1 ? JPATH_ADMINISTRATOR . '/cache' : $conf->get('cache_path', JPATH_SITE . 'cache'); 
*

x1

  • Давно я тут
  • 617
  • 15 / 0
  • Linux — это Windows для бытовой техники
Нет, не срабатывает. права тоже проверил.
Можете как то указать echо имени страницы в кэше?
*

x1

  • Давно я тут
  • 617
  • 15 / 0
  • Linux — это Windows для бытовой техники
Код

$clientId = 0;
echo (int) $clientId === 1 ? JPATH_ADMINISTRATOR . '/cache' : $conf->get('cache_path', JPATH_SITE . '/cache');
выдает
Код
cache
если поставить 1, то выдает правильный путь к кэшу админки
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
попробовал у себя вот так вот
Код
(int) $clientId === 1 ? JPATH_ADMINISTRATOR . '/cache' : JPATH_SITE.'/cache'
и так
Код
(int) $clientId === 1 ? JPATH_ADMINISTRATOR . '/cache' : $_SERVER['DOCUMENT_ROOT'].'/cache'
работает
« Последнее редактирование: 04.03.2019, 14:19:26 от SalityGEN »
*

x1

  • Давно я тут
  • 617
  • 15 / 0
  • Linux — это Windows для бытовой техники
Последний вариант сработал, Вам плюсик, спасибо!
Код
(int) $clientId === 1 ? JPATH_ADMINISTRATOR . '/cache' : $_SERVER['DOCUMENT_ROOT'].'/cache'

Но проблема требует продолжения... На сервере сейчас в папке com_k2 почти 4000 файлов кэша.
Из-за изменений 1 файла все они будут удалены и кэш будет пересоздан заново, а это не нужно, так страницы обновляться не будут.
Т.е. теряется вся суть использования кэша (запросов к базе К2 в этом случае нет).

Все таки, нельзя ли как то удалять только кэш измененной страницы, а не очищать всю папку com_k2?

Страница кэшируется в двух файлах в папке cache/com_k2, например:
Код

0faebb08dbf2c5221bbc22897e59bcc4-cache-com_k2-8d5f64a3b3273894607ecf54be8b916b.php
0faebb08dbf2c5221bbc22897e59bcc4-cache-com_k2-e03d6b0b46e9ce244c24a7fdfaedd10d.php


*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
пока не знаю как и возможно ли это, буду подумать, вопрос интересный
*

x1

  • Давно я тут
  • 617
  • 15 / 0
  • Linux — это Windows для бытовой техники
пока не знаю как и возможно ли это, буду подумать, вопрос интересный
Какая то же функция генерирует случайное имя и добавляет свое *-cache-com_k2-:
Код
0faebb08dbf2c5221bbc22897e59bcc4

может запоминать имя в какую нибудь глобальную переменную? Я не силен в php настолько. В любом случае надеюсь на вашу помощь.
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
Какая то же функция генерирует случайное имя и добавляет свое *-cache-com_k2-:
Код
0faebb08dbf2c5221bbc22897e59bcc4

может запоминать имя в какую нибудь глобальную переменную? Я не силен в php настолько. В любом случае надеюсь на вашу помощь.
это сделано от иньекции кеша, функция специально генерит такое название что никто не знает как файл называется и к нему нельзя обратиться.
в стандартном функционале можно удалять папками кеш весь\кеш компонента
*

sivers

  • Живу я здесь
  • 2464
  • 335 / 0
Кэширует скорее всего класс JCache из стандартного набора Joomla. Вызывается, вероятно, в модуле K2 - поищите там. У этого же класса есть метод частичной чистки кэша JCache::clean(). При вызове без параметров он чистит весь кэш. А с параметрами - только указанную группу.
Примеры использования кэша и ссылки на документацию можно посмотреть тут:
https://sivers.su/108-keshirovanie-funktsij-i-html-vyvoda-otladka.html

Найдите где он применен у вас - подумаем как сделать частичную чистку. Сам не пользуюсь К2, потому и посмотреть не на чем.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
Кэширует скорее всего класс JCache из стандартного набора Joomla. Вызывается, вероятно, в модуле K2 - поищите там. У этого же класса есть метод частичной чистки кэша JCache::clean(). При вызове без параметров он чистит весь кэш. А с параметрами - только указанную группу.
Примеры использования кэша и ссылки на документацию можно посмотреть тут:
https://sivers.su/108-keshirovanie-funktsij-i-html-vyvoda-otladka.html

Найдите где он применен у вас - подумаем как сделать частичную чистку. Сам не пользуюсь К2, потому и посмотреть не на чем.
частичную я уже почти собрал оно удаляет группу, а ему нужно конкретный файл убивать
*

sivers

  • Живу я здесь
  • 2464
  • 335 / 0
частичную я уже почти собрал оно удаляет группу, а ему нужно конкретный файл убивать
В любом случае желательно найти то место, где этот кэш генерится, и посмотреть как именно. Возможно, там получится извлечь имя файла. Ведь зная какой метод и с какими параметрами вызывается, не трудно заглянуть в исходники JCache и узнать как генерится имя файла.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
тут конкретно для com_k2 (строка 58)
Код
$arr = array('com_k2');
но если что можно через запятую вбить еще какие нибудь...
например:
Код
$arr = array('com_k2','com_content');

Спойлер
[свернуть]

а конкретное удаление файла еще пока мозгуется...
*

x1

  • Давно я тут
  • 617
  • 15 / 0
  • Linux — это Windows для бытовой техники
Посмотрел, для каждого материала К2 кэшируются страницы не только в папке com_k2, но и в других.
Т.е. искать и удалять надо во всей папке cache, например в cache/com_languages.
Код
-cache-_system-
-cache-com_k2-
-cache-com_languages-
-cache-com_menus-
-cache-com_modules-
-cache-com_plugins-
-cache-com_templates-
-cache-mod_breadcrumbs-
-cache-mod_custom-
-cache-mod_djimageslider-
-cache-mod_falang-
-cache-mod_menu-
-cache-mod_sp_news_highlighter-
-cache-page-

Имя страницы в кэше образуется так, на примере 2-х файлов из разных папок:
Код
'одинаковое уникальное имя'.'-cache-page-'.'абракадабра'.'.php'
'одинаковое уникальное имя'.'-cache-mod_menu-'.'абракадабра'.'.php'
Может это как то поможет...
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
в этом то и прикол, что закешированную страницу раскидывает на фрагменты.
но я кажись понял куда воевать, все достаточно сложнее чем я ожидал
нагуглил плагин - cachecontrol
он умеет мочить кеш отдельных страниц, но в нем есть неудобство, в него нужно заходить и руками скармливать ему url страницы
пока копаю его и думаю над автоматизацией

а вообще интересная и полезная штука получится, мб плагин соберу...
« Последнее редактирование: 04.03.2019, 16:55:25 от SalityGEN »
*

x1

  • Давно я тут
  • 617
  • 15 / 0
  • Linux — это Windows для бытовой техники
Спойлер
а конкретное удаление файла еще пока мозгуется...
Проверил на локал на двух материалах. Полностью удаляется папка  cache/com_k2, а при просмотре во фронте кэш редактируемых страниц даже не появляется!
Папка cache/com_k2 и кэш материала появляютмя только если отредактировать третий материал, но кэш первых двух материалов так и не образуется.
*

x1

  • Давно я тут
  • 617
  • 15 / 0
  • Linux — это Windows для бытовой техники
Похоже, коллега, что я не разобрался и ввел вас в заблуждение. Нет ни какого уникального имени.
Код
[s]<одинаковое уникальное имя материала в кэше>[/s]-cache-page-<абракадабра>.php
Оно сгенерировано как уникальное, но одинаковое для всех кэшированных страниц. После очистки кэша сейчас в папке com_K2 порядка 700 файлов и все:
Код
0faebb08dbf2c5221bbc22897e59bcc4-cache-com_k2-<уникальный набор символов>.php
« Последнее редактирование: 05.03.2019, 12:33:56 от x1 »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться