Im Modul: Clear Cache nach Eintrag in Field per db_insert()
am 23.08.2012 - 17:48 Uhr in
Hallo und Guten Abend
Ich füge in 'meinem' Modul per db_insert() einen Wert in ein CCK Feld ein.
Das funktioniert auch wie es soll.
Allerdings wird mir der neue Wert erst angezeigt wenn ich handisch den
Cache leere.
Ein cache_clear_all() wird nicht ausgeführt...
Allerdings erscheint es mir auch als 'übertrieben' gleich den ganzen Cache zu leeren
wenn ich nur ein Feld fülle.
Daher denke ich das ich was falsch mache....
nur was?
<?php
global $user;
$items = commerce_cart_order_load($user->uid);
$nid = db_insert('field_data_field_arrival')
->fields(array(
'entity_type' => 'commerce_order',
'bundle' => 'commerce_order',
'deleted' => 0,
'entity_id' => $items->order_id,
'revision_id' => 0,
'language' => 'und',
'delta'=>0,
'field_arrival_value'=>date('Y-m-d',$first),
))
->execute();
cache_clear_all();
?>Dankbar für jeden Hinweis!!
- Anmelden oder Registrieren um Kommentare zu schreiben

Du nutzt hier die falsche
am 23.08.2012 - 18:07 Uhr
Du nutzt hier die falsche Funktion um die Caches zu leeren.
Das Ganze sollte mit der drupal_flush_all_caches problemlos funktionieren.
SteffenR
hallo steffen danke für den
am 23.08.2012 - 19:53 Uhr
hallo steffen
danke für den hinweis.
mit drupal_flush_all_caches() funktioniert es auch.
allerdings wird dann natürlich eine ganze weile benötigt um die seite wieder
aufzubauen da drupal_flush_all_caches() ja den kompletten cache leert:
und zusätzlich noch einmal alle cache_* tabellen :)
das ist nicht gut..
Ich bin mittlerweile auf resetCache() des entity_get_controller Objektes
gestossen
Damit soll es eigendlich möglich sein den Feld Cache einer bestimmten Entity
zu leeren:
<?phpglobal $user;
$items = commerce_cart_order_load($user->uid);
entity_get_controller('commerce_order')->resetCache(array($items->order_id));
?>
Sieht eigendlich ganz schön aus
funktioniert aber nicht .!?!
zumindest kam ich durch drupal_flush_all_caches() auf die idee
nur die Tabelle cache_field zu leeren:
<?php
cache_clear_all('*', 'cache_field', TRUE);
?>
und das funktioniert auch.
Ist auch noch nicht optimal weil ja dann alle Felder
entcached werden...