Как очистить Drupal Cache (без Devel) - PullRequest
20 голосов
/ 05 августа 2009

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

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

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

Ответы [ 12 ]

0 голосов
/ 25 августа 2011

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

/**
 * 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.';
}
0 голосов
/ 26 августа 2010

ЗДЕСЬ ВЫ ИДЕТЕ:

Мне пришлось деинсталлировать модуль "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 - это переменная, которую я использую, она ИСТИНА в моей тестовой системе и ЛОЖЬ в производстве. Если у вас нет чего-то подобного, замените его на ИСТИНА или ЛОЖЬ, чтобы включить или выключить:

<?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; ?>

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

...