Funktionen übersteuern
![](https://www.drupalcenter.de/files/imagecache/upic_mini/pictures/picture-10376.jpg)
am 17.05.2011 - 08:07 Uhr in
Steh grad auf dem Schlauch: wie kann ich Funktionen von anderen Modulen übersteuern, die mit einem "_
" beginnen? Zum Beispiel "_text_allowed_values
" aus der text.module
von CCK?
- Anmelden oder Registrieren um Kommentare zu schreiben
Also ich würde mal behaupten,
am 17.05.2011 - 08:39 Uhr
Also ich würde mal behaupten, dass du die gar nicht übersteuern kannst, der Unterstrich hat nichts zu bedeuten, soweit ich weiß, das ist nur eine häufig benutzte Kennzeichnung für "private Funktionen", also Funktionen, die nur eine unterstützende Wirkung haben und nichts ausgeben oder so.
"Überschreiben" kannst du eigentlich nur die theme-Funktionen, soweit ich weiß.
Hm, das hatte ich befürchtet.
am 17.05.2011 - 08:46 Uhr
Hm, das hatte ich befürchtet. Gibt es eine andere Möglichkeit, oder muss ich jetzt bei einem Modul-Update jedes mal meine Änderungen von Hand nachträglich einarbeiten?
Private oder auch sonstige
am 17.05.2011 - 09:08 Uhr
Private oder auch sonstige Funktionen eines Moduls kannst Du nicht Überschreiben. Nur Funktionen, die auf den theme-Mechanismus aufsetzen sind zum Überschreiben vorgesehen. Alles Andere sind Änderungen am jeweiligen Modul und die mußt Du bei jedem Releasewechsel des Moduls nachpflegen.
Beste Grüße
Werner
Function-overrides
am 17.05.2011 - 09:33 Uhr
Hallo.
Die Funktion _text_allowed_values() wird nur von den 3 Theme-Funktionen des Moduls verwendet. Dementsprechend überschreibst Du in Deinem Theme einfach diese 3 Theme-Funktionen und verwendest dort eine eigene "allowed_values"-Funktion.
Kein Grund, an bestehenden Modulen herumzubasteln.
Super Sache, leider braucht
am 17.05.2011 - 15:06 Uhr
Super Sache, leider braucht meine zweite Funktion
_nodereference_potential_references_standard
manuelles Basteln … (oder?)hook_menu_alter
am 17.05.2011 - 15:22 Uhr
Auch das geht über ein eigenes Modul.
Du musst in [api:hook_menu_alter:6] den "page callback" für das autocomplete-Element ändern und kannst Dich dann im Callback (quasi als Kopie zu
nodereference_autocomplete()
) bzgl. der potential_references austoben.Beispiel:
<?php
/**
* Implementation of hook_menu_alter().
*/
function noderef_extended_menu_alter(&$items) {
// Change callback for nodereference autocomplete so we can control the views
// result.
$items['nodereference/autocomplete']['page callback'] = 'noderef_extended_autocomplete';
}
/**
* Menu callback; Retrieve a pipe delimited string of autocomplete suggestions for existing users
*/
function noderef_extended_autocomplete($field_name, $string = '') {
if (in_array($field_name, noderef_extended_alterable_fields())) {
// Use custom autocomplete functions.
// ...
$references = _noderef_extended_potential_references($field, $string, $match, array(), 10);
// ...
}
else {
// Use original noderefence autocomplete.
nodereference_autocomplete($field_name, $string);
}
}
/**
* Get a list of potential references for a given nodereference field.
*/
function _noderef_extended_potential_references($field, $string = '', $match = 'contains', $ids = array(), $limit = NULL) {
static $results = array();
// ...
return $results[$cid];
}
?>