web-dev-qa-db-fra.com

Comment vider le cache Drupal (sans Devel)

Comment vider les caches Drupal:

  • sans le module Devel
  • sans exécuter une instruction PHP dans un nouveau noeud, etc.
  • sans entrer dans la base de données elle-même

Comment ordonner à un utilisateur final de vider ses caches?

20
alexanderpas

Lorsque vous êtes connecté en tant qu'administrateur (évidemment, tous les utilisateurs du site ne doivent pas nécessairement pouvoir effacer le cache), une page devrait apparaître dans «Administrer> Configuration du site> Performances».

Et, au bas de la page, il devrait y avoir un bouton (quelque chose comme "Effacer les données en cache") pour effacer le cache.

Pour autant que je m'en souvienne, Devel n'a pas besoin de le faire, et vous n'avez vraiment pas besoin d'aller dans la base de données, ni d'exécuter du code PHP fait maison.


Pour référence, vous pouvez consulter Comment effacer le cache Drupal côté serveur

44
Pascal MARTIN

Vous pouvez également utiliser le module Drush , qui vous permet d'utiliser la ligne de commande pour exécuter des commandes Drupal courantes, telles que "drush cron" ou "drush cache clear".

20
Niels

Si vous souhaitez effacer le cache d'un module, vous pouvez utiliser le code suivant.

drupal_flush_all_caches();
7
sagesolutions

J'ai la solution la plus simple pour cela. Installez le module admin_menu (en fait, pas seulement à cette fin, une fois que vous avez installé ce module, vous ne le regretterez pas, lien: http://drupal.org/project/admin_menu ). Ok, alors sur un menu déroulant nouvellement apparu, survolez votre favicon et le menu déroulant apparaîtra et vous verrez: Vider le menu Tous les caches. Un clic - une chasse. De plus, vous pouvez vider tous les caches ensemble ou sélectionner les éléments à vider: Pages, menus, thèmes, etc. Essayez et vous ne reviendrez jamais)

4
user143520

Ce serait génial si vous pouviez obtenir le comportement en frappant:
http://drupal.local./admin/settings/performance?op=Clear%20cached%20data
mais vous ne pouvez pas.
Cependant, je tiens à noter l'URL permettant de raccourcir le menu d'administration (utilisez la dernière partie):
http://drupal.local. /admin/settings/performance

3
dlamblin

La suppression à la demande peut être effectuée dans Administrer> Configuration du site> Performances.

Vous devez configurer le travail cron pour qu'il s'exécute toutes les heures (ou selon l'intervalle qui vous convient).

Lorsque cron est exécuté sur Drupal, tous les caches sont effacés et reconstruits sans qu'un humain ait à le faire manuellement.

Si cette question concerne la thématisation, vous devez désactiver les mécanismes de mise en cache (agrégation css/js) et vous ne devrez pas effacer les données de cache lorsque vous apportez des modifications.

1
Kevin

J'ai trouvé ce qui suit à l'adresse: http://www.drupalgardens.com/content/clear-all-caches-not-working

Il existe une autre couche de mise en cache autour du site qui "efface tout Caches" n'affecte pas, vous avez raison. C'est la couche qui stocke le contenu pour les utilisateurs anonymes.

Si vous souhaitez contourner le cache à des fins de test, vous pouvez ajouter un fichier chaîne de requête indésirable à la fin du chemin de votre site. Par exemple, si vous voulait contourner le cache sur example.drupalgardens.com/foo, vous pouviez visitez exemple.drupalgardens.com/foo?bar=baz ou n’importe quel autre texte aléatoire mis en place comme? xxxxx = xxxxx.

Cela m'a aidé, car j'ai eu des problèmes où effacer le cache sous Configuration> Performance ne semblait pas aider.

1
ansorensen

Le code ci-dessus est pour Drupal 6.

Pour Drupal 7, le module de vidage du cache serait le suivant:

<?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.';
}

Note: que vous le videz ensuite en allant à:

sitename.com/flush-cache

Assurez-vous de leur donner la permission sur la page de permission. Effacez le cache une fois de manière "normale" si l'autorisation n'apparaît pas après la mise sous tension du module.

Cela est préférable lorsque vous ne souhaitez pas que votre client ait accès au menu d'administration mais que vous souhaitiez tout de même pouvoir vider le cache.

1
Sebastian Chedal

VOICI:

Je devais désinstaller le module "devel" (incompatible avec les éléments du menu spécial, ce dont j'avais besoin de pire), alors j'ai créé le mien.

Partout où vous voyez MODULENAME, remplacez-le par le nom de votre module.

ÉTAPE 1: Ajoutez à n’importe quel module (de préférence un de vos modules personnalisés) dans HOOK_MENU, avant la ligne "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,
);

ÉTAPE 2: Maintenant, dans le même fichier de module, où ce n'est pas "à l'intérieur" d'une autre fonction, ajoutez:

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

Maintenant, vous pouvez simplement aller à l'URL "/ flush-cache" sur votre site pour vider le cache. (Après avoir vidé la mémoire cache une dernière fois à l'ancienne.)

ÉTAPE 3: Si vous le souhaitez vraiment pratique, ajoutez ce qui suit à votre fichier page.tpl.php. Vous pouvez le mettre à peu près n'importe où entre <body> et </ body>. NOTE: $ my_is_test est une variable que j'utilise qui est TRUE sur mon système de test et FALSE en production. Si vous n'avez pas quelque chose comme ça, remplacez-le par TRUE ou FALSE pour l'activer ou le désactiver:

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

Et le tour est joué! Vous avez un lien "flush" dans le coin en haut à droite de chaque page sur laquelle vous pouvez cliquer. N'hésitez pas à modifier les montants "droit" et "haut" (ou de "droit" à "gauche" ou "haut" en "bas" pour le placer où bon vous semble. Ce positionnement de lien ne fonctionne que sur les navigateurs modernes, mais seulement pour vous, alors ça ne devrait pas être un problème, non?

0
Jeffiekins

Le module suivant crée un élément de menu accessible uniquement aux utilisateurs disposant de l'autorisation "vider le cache", que ce module rend disponible sur la page des autorisations utilisateur standard.

/**
 * 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
Shaun Dychko

Dans Drupal 8, le module de menu administrateur n'est pas encore prêt à être utilisé. Et il sera probablement remplacé par Drupal "Toolbar". Donc, pour le moment, il n’ya pas de moyen facile de vider le cache, sans aller à: 

admin/config/development/performance

La seule alternative consiste à ajouter un élément de menu dans la barre d'outils existante. Cela peut être fait en utilisant ce module , mais comme vous pouvez le constater, il reste encore un peu de travail. Je l'ai fait fonctionner, mais j'ai dû faire quelques ajustements.

0
coderama