Custom theme function in form
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.
Actuele inhoud
09 feb 2012
- , CKeditor zelf HTML en CSS toepassen in de code view , (Forumonderwerp) , DGNY
- , youtube film in website , (Forumonderwerp) , annemie
- , userpoints vraagje , (Forumonderwerp) , jeroenenwendy
08 feb 2012
- , Vacature Webdeveloper , (Forumonderwerp) , JoHo Processen ...
- , node id opslaan in database , (Forumonderwerp) , Noikes , Reacties: 5
07 feb 2012
- , Civi en Drupal installatie gevraagd! , (Forumonderwerp) , Koen van Hees
- , kan niet meer inloggen na verhuizing website , (Forumonderwerp) , meppel001
- , Image slider/banner maken in Dp7 , (Forumonderwerp) , CrazyFly , Reacties: 2
- , migrate van subdir naar main directory , (Forumonderwerp) , Jaap3D
- , Filter criteria , (Forumonderwerp) , Lambert de Groot , Reacties: 2
06 feb 2012
- , Activity map aanmaken , (Forumonderwerp) , Samuël2013
- , Weergave forums beperken tot containers die dan uitklapbaar zijn , (Forumonderwerp) , vdwaetsy
- , - , (Forumonderwerp) , karel3s
- , Tokens weergeven in een node , (Forumonderwerp) , Mindhunter , Reacties: 1
05 feb 2012
- , content type, manage fields, veld tonen naar gelang van item selected , (Forumonderwerp) , LLMM
MegaChriz
12 januari, 2010 - 16:03
Permalink
Deze vraag is reeds
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;
}?>