Tabellenheader "Select All"-checkbox bei tableselect gegen eine eigene Überschrift tauschen
Eingetragen von hsler (10)
am 29.08.2013 - 11:48 Uhr in
am 29.08.2013 - 11:48 Uhr in
Hallo,
bei Drupal 7 gibt es ja das Tableselect bei Formularen, den braucht man nur noch einen Header und ein Array mit Werten Mitgeben und die Tabelle wird schön von Drupal aufgebaut. Allerdings gibt es keine Möglichkeit die Checkbox mit der man alle Einträge auf einmal markieren kann durch eine eigene Überschrift zu ersetzen. Also habe ich das durch einfaches Javascript selber versucht, allerdings tauscht er immer die checkbox des ersten Eintrags in der Tabelle und nicht die Checkbox im Header, so als ob der Header gar nicht da wäre.
Hat jemand schon mal versucht auch eine eigene Überschrift zu machen und kennt das Problem?
Hier der Quellcode:
<?php
//
// DRUPAL VERSION 6
//
function test_menu()
{
$items = array();
$items['test'] = array(
'title' => t('Test Page!'),
'page callback' => 'test_page',
'page arguments' => array(1),
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function test_page()
{
$ausgabe = 'Test Daten zum Anzeigen.';
$tabelle = drupal_get_form('test_my_form');
$script = "<script type='text/javascript'>
document.getElementsByTagName('input')[0].outerHTML = 'TESTHEADER';
</script>";
return $ausgabe . $tabelle . $script;
}
function test_my_form(&$form_state)
{
$header = array('Header1' => 'Header1', 'Header2' => 'Header2', 'Header3' => 'Header3', 'Header4' => 'Header4');
$options = array(
array('Header1' => 'TEST', 'Header2' => 'TEST', 'Header3' => 'TEST', 'Header4' => 'TEST'),
array('Header1' => 'TEST', 'Header2' => 'TEST', 'Header3' => 'TEST', 'Header4' => 'TEST'),
array('Header1' => 'TEST', 'Header2' => 'TEST', 'Header3' => 'TEST', 'Header4' => 'TEST'),
array('Header1' => 'TEST', 'Header2' => 'TEST', 'Header3' => 'TEST', 'Header4' => 'TEST'),
);
$form['table'] = array(
'#type' => 'tableselect',
'#header' => $header,
'#options' => $options,
'#multiple' => TRUE,
'#empty' => t('Keine Daten gefunden.')
);
return $form;
}
?>
- Anmelden oder Registrieren um Kommentare zu schreiben
Kommst Du mit
am 29.08.2013 - 12:28 Uhr
Kommst Du mit hook_form_alter() nicht an die Checkbox ran?
Da geht noch was.
wenn ich mir die variable
am 29.08.2013 - 14:04 Uhr
wenn ich mir die variable $form mit dem debugger anschaue dann gibts diese spalte nicht, da steht ganz normal der header dem ich mitgebe drinn und wenn es von der funktion drupal_get_form zurückkommt steht es im tabellenheader auch noch nicht drin, es ist einfach leer wie man nachfolgend sieht:
<?php
<thead><tr><th class="select-all"></th><th>Header1</th><th>Header2</th><th>Header3</th><th>Header4</th> </tr></thead></code>
?>
wenn die webseite aber fertig aufgebaut ist steht es dann plötzlich da. daher wüsst ich nicht wie die hook_form_alter() benutzen könnte
Manchmal muß man um bestimmte
am 29.08.2013 - 14:37 Uhr
Manchmal muß man um bestimmte Änderungen machen zu können in die "After Build" Phase gehen.
Hier ein Beispiel (Drupal 6) um den Eintrag für einen Menüpunkt zu unterdrücken.
/**
* Implementation of hook_form_FORM_ID_alter().
*/
function DEINMODUL_form_FORM_ID_alter (&$form, &$form_state) {
// set the function for dealing with the form once it's complete
$form['#after_build'][] = 'DEINMODUL_unsetmenu_after_build';
}
/**
* Supress menu tab in related form
*/
function DEINMODUL_unsetmenu_after_build ($form, &$form_state) {
unset($form['menu']);
return $form;
}
Die echten Namen habe ich durch die Großbuchstaben ersetzt, aber das sollte zum Verständnis reichen.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Wie genau machst Du das?
am 29.08.2013 - 14:38 Uhr
wenn ich mir die variable $form mit dem debugger anschaue
Wie genau machst Du das?
Da geht noch was.
ZendStudio 10
am 02.09.2013 - 11:18 Uhr
Ist kein großes Hexenwerk, arbeite mit ZendStudio 10, da ist ein Debugger enthalten ;-)...
geht leider nicht
am 02.09.2013 - 11:27 Uhr
Manchmal muß man um bestimmte Änderungen machen zu können in die "After Build" Phase gehen.
Hier ein Beispiel (Drupal 6) um den Eintrag für einen Menüpunkt zu unterdrücken.
/**
* Implementation of hook_form_FORM_ID_alter().
*/
function DEINMODUL_form_FORM_ID_alter (&$form, &$form_state) {
// set the function for dealing with the form once it's complete
$form['#after_build'][] = 'DEINMODUL_unsetmenu_after_build';
}
/**
* Supress menu tab in related form
*/
function DEINMODUL_unsetmenu_after_build ($form, &$form_state) {
unset($form['menu']);
return $form;
}
Die echten Namen habe ich durch die Großbuchstaben ersetzt, aber das sollte zum Verständnis reichen.
Beste Grüße
Werner
also so funktioniert das nicht:
<?php
function test_form_test_my_form_alter (&$form, &$form_state) {
// set the function for dealing with the form once it's complete
$form['#after_build'][] = 'test_unsetmenu_after_build';
}
function test_unsetmenu_after_build ($form, &$form_state) {
unset($form['menu']);
return $form;
}
?>
Wenn ich mit dem Debugger an den anfang der Funktion viewx_unsetmenu_after_build springe dann kann ich sehen das unter $form es gar keinen eintrag 'menu' gibt, nur das gleiche wie auch vorher vor drupal_get_form, den header den ich mitgebe und die options, an der stelle kann man noch einige mehr informationen sehen, aber nichts was darauf schliessen lässt wo denn genau die checkbox in den tabellenheader auftaucht
Angebot
am 02.09.2013 - 11:32 Uhr
wenn ich mir die variable $form mit dem debugger anschaue
Wie genau machst Du das?
Ist kein großes Hexenwerk, arbeite mit ZendStudio 10, da ist ein Debugger enthalten ;-)...
Ist gerade übrigens auch im Angebot (50%) für 149,- bei denen auf der Webseite ;-).....
hsler schrieb wla
am 02.09.2013 - 14:39 Uhr
Manchmal muß man um bestimmte Änderungen machen zu können in die "After Build" Phase gehen.
Hier ein Beispiel (Drupal 6) um den Eintrag für einen Menüpunkt zu unterdrücken.
/**
* Implementation of hook_form_FORM_ID_alter().
*/
function DEINMODUL_form_FORM_ID_alter (&$form, &$form_state) {
// set the function for dealing with the form once it's complete
$form['#after_build'][] = 'DEINMODUL_unsetmenu_after_build';
}
/**
* Supress menu tab in related form
*/
function DEINMODUL_unsetmenu_after_build ($form, &$form_state) {
unset($form['menu']);
return $form;
}
Die echten Namen habe ich durch die Großbuchstaben ersetzt, aber das sollte zum Verständnis reichen.
Beste Grüße
Werner
also so funktioniert das nicht:
<?php
function test_form_test_my_form_alter (&$form, &$form_state) {
// set the function for dealing with the form once it's complete
$form['#after_build'][] = 'test_unsetmenu_after_build';
}
function test_unsetmenu_after_build ($form, &$form_state) {
unset($form['menu']);
return $form;
}
?>
Wenn ich mit dem Debugger an den anfang der Funktion viewx_unsetmenu_after_build springe dann kann ich sehen das unter $form es gar keinen eintrag 'menu' gibt, nur das gleiche wie auch vorher vor drupal_get_form, den header den ich mitgebe und die options, an der stelle kann man noch einige mehr informationen sehen, aber nichts was darauf schliessen lässt wo denn genau die checkbox in den tabellenheader auftaucht
habe jetzt eine einfachere Lösung gefunden die auch klappt: man muss das "select-all" rausmachen und dann taucht es nicht mehr auf, eigentlich total einfach, aber mal wieder zu kompliziert gedacht:
<?php
$tabelle = drupal_get_form('test_my_form');
$tabelle = str_replace('<th class="select-all"></th>', '<th>Löschen</th>', $tabelle);
?>