Как очистить Drupal Cache (без Devel)

Как очистить кеш Drupal:

  • без модуля Devel
  • без запуска некоторого оператора PHP в новом узле и т. д.
  • не заходя в саму базу данных

По сути, как вы инструктируете конечного пользователя очистить его кеши?

12 ответов

Решение

Когда вы вошли в систему как администратор (очевидно, не каждый пользователь сайта должен иметь возможность очистить кеш), должна появиться страница в "Администрирование> Конфигурация сайта> Производительность".

И внизу страницы должна быть кнопка (что-то вроде "Очистить кешированные данные") для очистки кеша.

Насколько я помню, Devel не нуждается в этом, и вам действительно не нужно ни заходить в базу данных, ни запускать какой-то самодельный код PHP.


В качестве справки вы можете взглянуть на Как очистить кеш на сервере Drupal

Вы также можете использовать модуль Drush, который позволяет использовать командную строку для выполнения популярных команд Drupal, таких как "drush cron" или "drush cache clear".

Если вы хотите очистить кеш от модуля, вы можете использовать следующий код.

drupal_flush_all_caches();

У меня есть самое простое решение для этого. Установите модуль admin_menu (на самом деле, не только для этой цели, после того, как вы установили этот модуль, вы не пожалеете об этом, ссылка: http://drupal.org/project/admin_menu). Хорошо, тогда во вновь появившемся верхнем выпадающем меню появится ваш значок и выпадающее меню, и вы увидите: Сбросить все кэширующие меню. Один клик - один флеш. Более того, вы можете сбрасывать все кэши вместе или выбирать, что сбрасывать: страницы, меню, темы и т. Д. Попробуйте, и вы никогда не вернетесь)

Было бы замечательно, если бы вы могли просто получить поведение, нажав:
http://drupal.local./admin/settings/performance?op=Clear%20cached%20data
но ты не можешь.
Тем не менее, я хочу отметить URL для быстрого доступа через меню администратора (используйте последнюю часть):
http://drupal.local. /admin/settings/performance

НУ ВОТ:

Мне пришлось деинсталлировать модуль "devel" (он был несовместим со специальными пунктами меню, которые мне были нужны хуже), поэтому я сделал свой собственный.

Везде, где вы видите MODULENAME, замените его на имя вашего модуля.

ШАГ 1: Добавьте к любому модулю (предпочтительно к одному из ваших пользовательских модулей) в HOOK_MENU до строки "return $items":

// short cut for flushing the caches:
$items['flush-cache'] = array(
  'type' => MENU_CALLBACK,
  'title' => t('Flush the cache'),
  'description' => 'MODULENAME Custom Cache Flush',
  'page callback' => 'MODULENAME_flush_cache',
  'access callback' => TRUE,
);

ШАГ 2: Теперь, в том же файле модуля, где он не "внутри" какой-либо другой функции, добавьте:

/**  Page callback  **/
function MODULENAME_flush_cache() {
  drupal_flush_all_caches();
  return 'Caches were flushed.';
}

Теперь вы можете просто перейти по URL-адресу "/ flush-cache" на вашем сайте, чтобы очистить кеш. (После того, как вы очистите кэш в последний раз по-старому.)

ШАГ 3: Если вы хотите, чтобы ДЕЙСТВИТЕЛЬНО это было удобно, добавьте следующее в файл page.tpl.php. Вы можете поместить его где угодно между и . ПРИМЕЧАНИЕ: $my_is_test - это переменная, которую я использую, она TRUE в моей тестовой системе и FALSE в производстве. Если у вас нет чего-то подобного, замените его на ИСТИНА или ЛОЖЬ, чтобы включить или выключить:

<?php if ($my_is_test): ?>
<a style="text-align:left; position:absolute; right:2px; top:20px;" href="<?=$base_path?>flush-cache" onclick="this.innerHTML = '<b><blink><big>Wait...</big></blink></b>';">flush</a>
<? endif; ?>

И вуаля! В правом верхнем углу каждой страницы, на которую вы можете нажать, есть ссылка "очистить". Не стесняйтесь менять "правую" и "верхнюю" суммы (или меняйте "правую" на "левую" или "верхнюю" на "нижнюю", чтобы разместить ее там, где вам нравится. Это позиционирование ссылок работает только в современных браузерах, но это только для вас, так что это не должно быть проблемой, верно?

Я нашел следующее по адресу: http://www.drupalgardens.com/content/clear-all-caches-not-working

Вокруг сайта есть еще один слой кеширования, который не влияет на "очистку всех кешей", вы правы. Это слой, который хранит контент для анонимных пользователей.

Если вы хотите обойти кеш для тестирования, вы можете добавить строку с ненужными запросами в конец пути вашего сайта. Например, если вы хотите обойти кеш на example.drupalgardens.com/foo, вы можете посетить example.drupalgardens.com/foo?bar=baz или любой другой произвольный текст, настроенный как? Xxxxx = xxxxx.

Это помогло мне, потому что у меня были проблемы, когда очистка кэша в разделе "Конфигурация"> "Производительность", похоже, не помогала.

Код выше для Drupal 6.

Для Drupal 7 модуль flush-cache будет выглядеть следующим образом:

<?php 
/**
 * Implementation of hook_menu()
 */
function flush_cache_menu() {
  $items = array();

  $items['flush-cache'] = array(
  'type' => MENU_NORMAL_ITEM,
  'title' => t('Flush the cache'),
  'description' => 'Flush all website caches to make sure it updates to relect '.
    'your recent changes.',
  'page callback' => 'flush_cache_custom_callback',
  'access callback' => user_access('flush cache'),
  );

  return $items;
}

/**
 * Implementation of hook_permission()
 */
function flush_cache_permission() {
  return array(
    'administer my module' => array(
      'title' => t('flush cache module'),
      'description' => t('Content admin flush cache.'),
    ),
  );
}

/**
 * Function that flushes the cache
 */
function flush_cache_custom_callback() {
  drupal_flush_all_caches();
  return 'Caches were flushed.';
}

Примечание: чтобы затем очистить его, перейдите к:

sitename.com/flush-cache

Убедитесь, что вы даете им разрешение на странице разрешения. Очистите кэш один раз "нормальным" способом, если разрешение не появляется после включения модуля.

Это предпочтительно, когда вы не хотите, чтобы ваш клиент получал доступ к меню администратора, но вы все еще хотите, чтобы они могли очищать кеш.

Очистка по требованию может быть выполнена в Администрирование> Конфигурация сайта> Производительность.

Вы должны настроить работу cron так, чтобы она запускалась каждый час (или в любое другое время).

Когда cron запускается на Drupal, все кэши очищаются и перестраиваются без необходимости делать это вручную.

Если этот вопрос относится к тематике, вам следует отключить механизмы кэширования (агрегация css/js), и вам не придется очищать данные кэша при внесении изменений.

В Drupal 8 модуль меню администратора еще не совсем готов к использованию. И он, вероятно, будет заменен на Drupal "Панель инструментов". Так что сейчас нет простого способа очистить кеш, не переходя к следующему:

admin/config/development/performance

Единственная альтернатива - добавить пункт меню в существующую панель инструментов. Это можно сделать с помощью этого модуля, но, как вы можете видеть, он все еще требует небольшой работы. Я получил это работает, но пришлось сделать несколько настроек.

Следующий модуль создает пункт меню, доступный только пользователям с разрешением "очистить кеш", который этот модуль делает доступным на странице разрешений обычного пользователя.

/**
 * Implementation of hook_menu()
 */
function flush_cache_menu() {
  $items = array();

  $items['flush-cache'] = array(
  'type' => MENU_NORMAL_ITEM,
  'title' => t('Flush the cache'),
  'description' => 'Flush all website caches to make sure it updates to relect '.
    'your recent changes.',
  'page callback' => 'flush_cache_custom_callback',
  'access callback' => user_access('flush cache'),
  );

  return $items;
}

/**
 * Implementation of hook_perm()
 */
function flush_cache_perm() {
  return array('flush cache');
}

/**
 * Function that flushes the cache
 */
function flush_cache_custom_callback() {
  drupal_flush_all_caches();
  return 'Caches were flushed.';
}

Используйте drush и эту команду: drush cc all

Если вы используете Boost для кеширования, вам нужно быть более конкретным:

drush @alias_name cc all
Другие вопросы по тегам