von Modul erzeugter Block lässt sich nicht verschieben
am 11.12.2010 - 15:49 Uhr in
Hallo,
ein Komilitone und ich entwickeln derzeit ein eigenes Modul welches ein css dropdown-menu erzeugt. Das Modul als solches arbeitet einwandfrei, allerdings sind wir nun dabei zu dem Modul einen Block zu erstellen, welcher dann frei einer jeweiligen Region zuweisbar sein soll. Der Block an sich ist da.
Nun zu unserem Problem:
wenn ich dem Block eine Region zuweise und auf speichern klicke bekomme ich eine Meldung das alles gespeichert wurde, wenn ich dann allerdings in der Liste schaue hat sich nichts verändert und der Block ist immernoch deaktiviert.
Ich poste hier mal den Code, vielleicht kann ja jemand etwas damit anfagen:
<?php
/*function SimpleTabs_init()
{
global $user;
drupal_set_message(nl2br(print_r($user,1)));
}*/
/**
* implementation of hook_perm
*/
function css_dropdown_perm()
{
return array('view SimpleTabs');
}
/**
* implementation of hook_menu
*/
function css_dropdown_menu()
{
$items = array();
$items['admin/settings/css_dropdown'] = array(
'title' => 'css_dropdown',
'description' => 'Admin Sample Page',
'page callback' => 'css_dropdown_admin',
'weight' => -50,
'access arguments' => array('view css_dropdown'),
//'type' => MENU_CALLBACK,
);
$items['css_dropdown'] = array(
'title' => 'css_dropdown',
'description' => 'mache css_dropdown',
'page callback' => 'css_dropdown',
'access arguments' => array('view css_dropdown')
);
return $items;
}
function css_dropdown_admin()
{
return '<hr>admin simple tabs<hr>';
}
function css_dropdown($mlid = 0)
{
drupal_add_css('sites/all/includes/dropdown.css');
$page_content = '<div id="menu1">';
$page_content .= css_dropdown_menues();
return $page_content.'</div>';
}
function css_dropdown_menues($mlid = 0)
{
$page_content = '<ul>';
$result = db_query("SELECT *FROM {menu_links} WHERE `menu_name` = 'navigation' AND `plid` = %d AND `hidden` = 0 ORDER BY weight ASC;",$mlid);
while($link = db_fetch_array($result)) {
$page_content .= '<li><a href="#">'.$link['link_title'].'</a>';
if($link['has_children']) $page_content .= css_dropdown_menues($link['mlid']);
$page_content .= '</li>';
}
return $page_content.'</ul>';
}
function css_dropdown_block($op = 'list', $delta = '', $edit = array()) {
// The $op parameter determines what piece of information is being requested.
switch ($op) {
case 'list':
// If $op is "list", we just need to return a list of block descriptions.
// This is used to provide a list of possible blocks to the administrator;
// end users will not see these descriptions.
$blocks['configurable-text'] = array(
'info' => t('Example: configurable text string'),
'visibility' => '1',
);
// A block can provide default settings. In this case we'll enable the
// block and make it visible only on the 'node/*' pages.
$blocks['empty'] = array(
'info' => t('Example: empty block'),
'status' => TRUE,
'weight' => 0,
'visibility' => 1,
'pages' => 'node/*',
);
return $blocks;
case 'configure':
// If $op is "configure", we need to provide the administrator with a
// configuration form. The $delta parameter tells us which block is being
// configured. In this example, we'll allow the administrator to customize
// the text of the first block.
$form = array();
if ($delta == 'configurable-text') {
// All we need to provide is a text field, Drupal will take care of
// the other block configuration options and the save button.
$form['block_example_string'] = array(
'#type' => 'textfield',
'#title' => t('Block contents'),
'#size' => 60,
'#description' => t('This string will appear in the example block.'),
'#default_value' => variable_get('block_example_string', t('Some example content.')),
);
}
return $form;
case 'save':
// If $op is "save", we need to save settings from the configuration form.
// Since the first block is the only one that allows configuration, we
// need to check $delta to make sure we only save it.
if ($delta == 'configurable-text') {
// Have Drupal save the string to the database.
variable_set('block_example_string', $edit['block_example_string']);
}
#return; // Das muss raus gem. hook_blook API Beschreibung
case 'view':
// If $op is "view", then we need to generate the block for display
// purposes. The $delta parameter tells us which block is being requested.
switch ($delta) {
case 'configurable-text':
// The subject is displayed at the top of the block. Note that it
// should be passed through t() for translation.
$block['subject'] = t('Title of configurable-text block');
// The content of the block is typically generated by calling a custom
// function.
$block['content'] = block_example_contents(1);
break;
case 'empty':
$block['subject'] = t('Title of block #2');
$block['content'] = block_example_contents(2);
break;
}
return $block;
}
}
function block_example_contents($which_block) {
switch ($which_block) {
case 1:
// Modules would typically perform some database queries to fetch the
// content for their blocks. Here, we'll just use the variable set in the
// block configuration or, if none has set, a default value.
return variable_get('block_example_string', t('A default value.'));
case 2:
// It is possible that your block will not have any content, since it is
// probably dynamically constructed. In this case, Drupal will not display
// the block at all.
return;
}
}
?>
Weiß jemand woran es liegen könnte das der Block sich nicht in eine Region verschieben lässt?
LG Meister Lamp
- Anmelden oder Registrieren um Kommentare zu schreiben
Hast du schon mal versucht
am 13.12.2010 - 11:22 Uhr
Hast du schon mal versucht eine default region vorzugeben?
Und auch wenn Module nur einen Block bereit stellen wird das array eigentlich immer so aufgebaut
$blocks[0] = array(
vielleicht liegt es daran...
Sonst würde ich erstmal den reinen Bsp-Code versuchen.
Theme ist ein Standard Theme?
-----------
Luca Curella
Kooperative Netze - Berlin
Das Theme ist Garland als ja
am 14.12.2010 - 17:02 Uhr
Das Theme ist Garland als ja ein Standardtheme. Als Code haben wir eigentlich fast den originalen BSP Code verwendet. Wir werden das mal als nächstes Prüfen ob wir etwas zu sehr verändert haben.
Immer wenn das Modul testweise aktiviert ist, bekomme ich beim Aufrufen von admin/build/block...
diese Fehlermeldung:
warning: Invalid argument supplied for foreach() in F:\Localhost\xampp\htdocs\drupal\includes\common.inc on line 3389.
warning: array_merge() [function.array-merge]: Argument #2 is not an array in F:\Localhost\xampp\htdocs\drupal\includes\common.inc on line 3272.
Sobald ich das Modul wieder deaktiviert habe, ist der Fehler weg. Vielleicht hilft das ja auch weiter?
Hast Du etwa PHP 5.3 in
am 14.12.2010 - 19:39 Uhr
Hast Du etwa PHP 5.3 in deiner Installation laufen? Dann ist das die Ursache. Viele Module von Drupal kommen damit noch nicht zurecht. Es sollte noch eine 5.2.x-version sein.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Hallo Werner, danke für
am 14.12.2010 - 23:43 Uhr
Hallo Werner,
danke für deinen Hinweis! Ich hab tatsächlich PHP 5.3.1 laufen. Wirkt sich das denn auch auf ein selbst angelegtes neues Modul aus?
Du rufst doch offensichtlich
am 15.12.2010 - 10:15 Uhr
Du rufst doch offensichtlich irgendwelche Drupal-internen Funktionen auf. Dabei behandelts Du die Übergabeparameter entweder nicht gemäß Dokumentation oder die Übergabe ist nicht konform mit den strikteren Regeln von PHP 5.3. Da mußt du ansetzen.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Könnte es denn daran liegen
am 16.12.2010 - 10:51 Uhr
Könnte es denn daran liegen das ich in einer Funktion Rekursion benutze?
<?php
if($link['has_children']) $page_content .= css_dropdown_menues($link['mlid']);
?>
*push* Weiß keiner einen Rat?
am 20.12.2010 - 13:31 Uhr
*push*
Weiß keiner einen Rat?