[gelöst]Hook_menü anlegen funktioniert nicht
am 21.08.2012 - 11:50 Uhr in
Hallo,
Erstmal vielen dank, dass ihr euch diese Frage anschaut :-)
Also ich fange gerade an Module zu programmieren und ich habe schon beim einbinden von einem Hook_menü (hoffe ich benutzte den richtigen Ausdruck, falls nicht ich möchte oben neben Hilfe einen zusätzlichen Punkt hinzufügen wo nur ich als admin was machen kann)
Hier sind die besagten Stellen dazu:
<?php
function google_wetter_menu() {
$items["admin/settings/Google Wetter"] = array(
'title' => 'Google Wetter',
'description' => 'Orte des Wettermoduls einstellen',
'page callback' => 'drupal_get_form',
'page arguments' => array('google_wetter_admin'),
'access arguments' => array('administer mm_weather settings'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
......
?>und hier ist dann die entsprechende goole_wetter_admin Funktion:
<?php
function google_wetter_admin() {
$form = array();
$staedte = db_select("wetterdaten_staedte","staedte")->fields("staedte")->execute()->fetchAssoc();
$form['staedte'] = array(
'#type' => 'textfield',
'#size'=> '120',
'#title' => t('Städte die gelogt werden sollen'),
'#default_value' => $staedte['staedte'],
'#description' => t("Die Städte durch <b>|</b> trennen. zB. Berlin|München|Frankfurt<br /><a href='../config/system/cron'>Interval (Cron) einstellen</a>"),
'#required' => TRUE,
);
//Submit button:
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Staedte sichern'),
'#suffix' => '<br /><br /><br />Aktuelles Wetter:<br />'.$div.'<p style="margin-top: 300px;">Die Datenbank durchsuchen: Module > Weather Log > Hilfe<br /><a href="../help/weather_log">Oder einfach hier klicken.</a></p>'
);
return $form;
}
?>Jetzt zu meinem Problem:
Wenn ich das Modul aktiviere wird dieser Punkt einfach nciht angezeigt und ich weiß nicht wieso. Ich hab jetzt wirklich viel versucht und versucht zu debugen (was ich in drupal einfach nicht wirklich hinbekomme) wäre echt super wenn ihr mal paar kommentare dazu und meinem Problem geben könntet.
Vielen Dank im Voraus
- Anmelden oder Registrieren um Kommentare zu schreiben

Hallo, kannst du den Pfad
am 21.08.2012 - 12:13 Uhr
Hallo,
kannst du den Pfad manuell navigieren?
Falls nicht, setze mal testweise access callback auf TRUE.
Wie schon erwähnt, probier
am 21.08.2012 - 12:17 Uhr
Wie schon erwähnt, probier mal, den Pfad manuell anzusurfen.
Außerdem, ich weiß nicht, ob das evtl. zulässig ist, aber ein Pfad mit Leerzeichen drin macht mich persönlich stutzig, vielleicht solltest du den Pfad mal auf sowas setzen: "admin/settings/google_wetter".
Und mal den Drupal-Cache leeren (nicht den Browser-Cache).
also ich hab wie du mir
am 21.08.2012 - 12:25 Uhr
also ich hab wie du mir empfohlen hast den Pfad auf admin/settings/Google_Wetter gesetzt und so im browser eingegeben ich komme aber nur ins verwaltungsmenü, dort sind alle vorhanden Punkte aufgelistet außer meiner :-)
Cache habe ich mehrmals gelöscht sowohl von drupal auch vom browser....
Liegts vllt komplett am code von mir?
hier ist mal der komplette code:
<?php
<?php
// $Id$
function google_wetter_menu() {
$items["admin/settings/Google_Wetter"] = array(
'title' => 'Google Wetter',
'description' => 'Orte des Wettermoduls einstellen',
'page callback' => 'drupal_get_form',
'page arguments' => array('google_wetter_admin'),
'access arguments' => array('administer mm_weather settings'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function google_weather_get_weather() {
$api = simplexml_load_string(utf8_encode(file_get_contents(("http://www.google.com/ig/api?weather=".variable_get('google_weather_city',"PLZ")."&hl=de"))));
$wetter = array();
$wetter['stadt'] = $api->weather->forecast_information->city->attributes()->data;
$stadt=explode(",",$wetter['stadt']);
$wetter['stadt']=$stadt[0];
$wetter['datum'] = $api->weather->forecast_information->forecast_date->attributes()->data;
$wetter['zeit'] = $api->weather->forecast_information->current_date_time->attributes()->data;
$wetter[0]['zustand'] = $api->weather->current_conditions->condition->attributes()->data;
$wetter[0]['temperatur'] = $api->weather->current_conditions->temp_c->attributes()->data;
$wetter[0]['luftfeuchtigkeit'] = $api->weather->current_conditions->humidity->attributes()->data;
$wetter[0]['wind'] = $api->weather->current_conditions->wind_condition->attributes()->data;
$wetter[0]['icon'] = $api->weather->current_conditions->icon->attributes()->data;
$i = 1;
foreach($api->weather->forecast_conditions as $weather)
{
$wetter[$i]['wochentag'] = $weather->day_of_week->attributes()->data;
$wetter[$i]['zustand'] = $weather->condition->attributes()->data;
$wetter[$i]['tiefsttemperatur'] = $weather->low->attributes()->data;
$wetter[$i]['hoechsttemperatur'] = $weather->high->attributes()->data;
$wetter[$i]['icon'] = $weather->icon->attributes()->data;
$i++;
}
$output = '<div style="font-size:12pt;">'.$wetter['stadt'].', '.date("d.m.Y",strtotime($wetter['datum'])).'</div>
<div style="width:35%;float:left;"><img title="'.$wetter[0]['zustand'].'" width="60" src="http://www.google.com/'.$wetter[0]['icon'].'"/></div>
<div style="width:65%;float:right;text-align:right;"><span style="font-size:28pt;">'.$wetter[0]['temperatur'].'° C</span></div>
<br clear="all">
<div style="width:100%;">';
for($i=2;$i<=4;$i++) {
$output.='
<span style="margin-right:10px;"><img title="'.$wetter[$i]['zustand'].'" src="http://www.google.com'.$wetter[$i]['icon'].'" width="20"></span>
<span>'.$wetter[$i]['wochentag'].'</span>
<span>'.$wetter[$i]['tiefsttemperatur'].' - '.$wetter[$i]['hoechsttemperatur'].'° C</span>
<br/>';
}
$output.='</div>';
return $output;
}
function google_wetter_admin() {
$form = array();
$staedte = db_select("wetterdaten_staedte","staedte")->fields("staedte")->execute()->fetchAssoc();
$form['staedte'] = array(
'#type' => 'textfield',
'#size'=> '120',
'#title' => t('Städte die gelogt werden sollen'),
'#default_value' => $staedte['staedte'],
'#description' => t("Die Städte durch <b>|</b> trennen. zB. Berlin|München|Frankfurt<br /><a href='../config/system/cron'>Interval (Cron) einstellen</a>"),
'#required' => TRUE,
);
//Submit button:
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Staedte sichern'),
'#suffix' => '<br /><br /><br />Aktuelles Wetter:<br />'.$div.'<p style="margin-top: 300px;">Die Datenbank durchsuchen: Module > Weather Log > Hilfe<br /><a href="../help/weather_log">Oder einfach hier klicken.</a></p>'
);
return $form;
}
?>
Hast du denn die Berechtigung
am 21.08.2012 - 12:35 Uhr
Hast du denn die Berechtigung
"administer mm_weather settings"mittelshook_permissionerzeugt?Gute Frage..
am 21.08.2012 - 12:39 Uhr
Ok nein ich denke nicht. Ich hab oben den kompletten Code in der .modul geschrieben. Wie mach ich dass denn? Kannst du mir das bitte mal kurz als beispiel zeigen? wenns nichts ausmacht
Du machst oben ein <?php zu
am 21.08.2012 - 12:47 Uhr
Du machst oben ein
<?phpzu viel auf, kann das sein?Ansonsten müsste z. B. das hier rein:
<?phpfunction google_wetter_permission() {
return array(
'administer mm_weather settings' => array(
'title' => t('Administer MM-Weather-Settings'),
'description' => t('Perform administration tasks for my module.'),
),
);
}
?>
Das fügst du ein und leerst den Drupal-Cache.
Heißt deine Modul-Datei auch
google_wetter.module?nein der obere Tag ist von
am 21.08.2012 - 12:51 Uhr
nein der obere Tag ist von dem einfügen von hier ich hab gerade nochmal nachgeschaut.
ok ich probiers mal. Vielen dank für das Beispiel. :-)
Nein es heißt mm_weather.module
Oder soll ich es umbenennen?
ok habs mal eingefügt und den
am 21.08.2012 - 12:56 Uhr
ok habs mal eingefügt und den cache geleert immer noch nichts da. Ich bin momentan echt mit meinem Latein am Ende...
Die hooks müssen schon mit
am 21.08.2012 - 13:09 Uhr
Die hooks müssen schon mit dem Modul-Namen übereinstimmen. Und Modulname == Dateiname. Du brauchst in deinem Fall also eine
mm_weather.moduleund einemm_weather.infoUnd die Hooks müssen dann natürlich nicht
google_wetter_menuheißen, sondernmm_weather_menu, sonst kann das gar nicht klappen.Anfängerfehler
am 21.08.2012 - 13:17 Uhr
Tja so ist das wenn man sich die sachen ohne Lernmaterial beibringt. Klar jetzt wo du das sagst klingts logisch habs geändert und zack da ist das Ding. Ich glaube ich muss mir mal das Pro. Drupal7 Development besogen. Oder kennst du vllt eine deutsch Sprachige version davon? Wenn nicht schlimm ist es nciht, soviel englisch kann ich :-)
Danke aber für deinen Lebensrettenden Tipp