Custom theme function in form

Forums: 
Drupalversie: 

Voor een website heb ik Ubercart geïnstalleerd. Nu wilde ik een extra veld toevoegen aan één van de formulieren die Ubercart aanbiedt, namelijk bij het formulier voor attribuutopties. Het toevoegen van het veld is gelukt (met behulp van hook_form_alter), maar nu wilde ik de weergave van het formulier manipuleren omdat deze niet correct wordt getoond op de volgende pagina:
admin/store/products/classes/testproduct/options
De toegevoegde velden vallen buiten de tabel.

Ik heb al ontdekt dat je de weergave van het formulier kan manipuleren door theme_FORM_ID() aan te roepen waar FORM_ID het id van het formulier is. Echter de functie theme_uc_object_options_form() is al in uc_attribute.admin.inc gedefinieerd. Nu zoek ik een manier om deze functie te overriden omdat ik liever niet de originele code aanpas.

Op de Drupal Form API kwam ik tegen dat je dan aan het formulier '#theme' moet toevoegen en daarin de naam van de vervangende functie moet vermelden:
http://api.drupal.org/api/drupal/developer--topics--forms_api.html/6
(zie het eerste punt onder het kopje 'Theming Forms').

Dit heb ik geprobeerd, maar de functie die ik had opgegeven lijkt niet te worden aangeroepen. De weergave van het formulier is wel anders, de functie theme_uc_object_options_form() wordt niet meer aangeroepen nadat ik '#theme' heb toegevoegd aan de array.

Code:<?php
/**
* Implementatie van hook_form_FORM_ID_alter()
* @param array $p_aForm
* @param array $p_aFormState
* @return void
*/
function uc_attribute_variable_price_form_uc_object_options_form_alter(&$p_aForm, $p_aFormState)
{
// Code voor het toevoegen van het veld
// (...)

// Submit functie toevoegen
$p_aForm['#submit'][] = 'uc_attribute_variable_price_form_uc_object_options_form_submit';

// Custom thema-functie
$p_aForm['#theme'] = 'eveneentest';
}

// Hieronder een paar testfuncties, kijken of er een van wordt aangeroepen

/**
* theme_eveneentest()
*/
function theme_eveneentest($p_aForm)
{
die('theme_eveneentest aangeroepen');
}

/**
* theme_eveneentest_form()
*/
function theme_eveneentest_form($p_aForm)
{
die('theme_eveneentest_form aangeroepen');
}

/**
* eveneentest()
*/
function eveneentest($p_aForm)
{
die('eveneentest aangeroepen');
}

/**
* eveneentest_form()
*/
function eveneentest_form($p_aForm)
{
die('eveneentest_form aangeroepen');
}
?>

Hoe zorg ik er nu voor dat ik een eigen functie kan gebruiken voor de weergave van het formulier? Geen van de functies in het codevoorbeeld werden aangeroepen.

Deze vraag is reeds beantwoord op het internationale forum van Drupal.
http://drupal.org/node/681512

De bedoeling was om een thema te registreren door hook_theme() in de module te implementeren. Daarna kon er een functie van dat 'thema' worden gemaakt.

Code:
<?php
/**
* Implementatie van hook_form_FORM_ID_alter()
* @param array $p_aForm
* @param array $p_aFormState
* @return void
*/
function uc_attribute_variable_price_form_uc_object_options_form_alter(&$p_aForm, $p_aFormState)
{
// Code voor het toevoegen van het veld
// (...)

// Submit functie toevoegen
$p_aForm['#submit'][] = 'uc_attribute_variable_price_form_uc_object_options_form_submit';

// Custom thema-function
$p_aForm['#theme'][] = 'eveneentest';
}

/**
* Implementatie van hook_theme()
* @param array $p_aExisting
* @param string $p_sType
* @param string $p_sTheme
* @param string $p_sPath
*/
function uc_attribute_variable_price_theme($p_aExisting=array(), $p_sType=null, $p_sTheme=null, $p_sPath=null)
{
return array(
'eveneentest' => array (
'arguments' => array('form' => NULL),
'type' => 'module',
),
);
}

/**
* theme_eveneentest()
* @param array $p_aForm
* @return string $sOutput
*/
function theme_eveneentest($p_aForm)
{
$sOutput = '';

// (...)

$sOutput .= drupal_render($p_aForm);
return $sOutput;
}?>

Actuele inhoud

09 feb 2012

08 feb 2012

07 feb 2012

06 feb 2012

05 feb 2012