Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

arg() gibt immer etwas falsches zurück (kein Aliasproblem)

Eingetragen von XPectIT@drupal.org (48)
am 27.04.2009 - 07:20 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

Guten Morgen,

ich schreibe meine selbstgebastelten Module um damit sie auf D6 laufen.

Jetzt fiel mir etwas (für mich) kurioses auf.

Ich hab eine Funktion die so ähnlich beginnt

funktion hook_menu() {
$url[0] = arg(0);
$url[1] = arg(1);
$url[2] = arg(2);

items['user/%user/meinRegister'] ...
...
...
...

print_r($url)
}

Wenn ich mir jetzt den Inhalt von $url anzeigen lasse, dann steht dort
url[0] = admin
url[1] = build
url[2] = module

auch wenn die Seite http://meineSeite.de/user/2/meinRegister angezeigt wird.
Wie ich den Pfad setze hat keine Auswirkung auf arg(), natürlich auf die Seite die ich aufrufen muss.

Mir ist nicht so richtig klar wie das sein kann, unter D5 ging das einwandfrei. An Aliasen kann es schlecht liegen, da ich ja nicht auf einen Alias zugreife und die Seite wird auch korrekt im "Mein Konto" angezeigt.
Hat wer bitte einen kurzen prägnanten Tip?

‹ Übersetzung verfassen Titel-Eingabefeld bei node/add entfernen ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Wie jetzt wenn du

Eingetragen von Tobias Bähr (4019)
am 27.04.2009 - 07:24 Uhr

Wie jetzt wenn du user/123/meinR... aufrufst, hast du als arg0 admin, arg1 build?

----------------------------------------

http://tobiasbaehr.de/
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen

  • Anmelden oder Registrieren um Kommentare zu schreiben

Genau, und das kommt mir

Eingetragen von XPectIT@drupal.org (48)
am 27.04.2009 - 18:49 Uhr

Genau, und das kommt mir schon etwas merkwürdig vor.

Zuvor habe ich ein Update von 5.16 auf 6.10 gemacht, das fehlerfrei durchlief.
Update status sagt auch das ich aktuell bin.
Es sind sonst keine weiteren Module aktiviert.

Edit:
Ich habs jetzt anders gemacht:

      $items['user/%user/meinRegister'] = array(
          'title' => 'Register im Userkonto',
          'page callback' => 'meineRegister_function',
          'page arguments' => array($user, 1),...

Aber irgendwas stimmt bei meiner Testumgebung nicht, denn selbst als ich:
$path = $_GET['q'];
aufrief und dann $path ausgab war "admin/build/module" drin.
Danach habe ich mal den Browser-Cache deaktiviert, Cacheing in Drupal ausgestellt und den Cache geleert. Seit dem hatte ich dann "admin/settings/performance" in $path stehen. Naja zumindest solange bis ich Module de-/aktiviert hatte, dann stand $path nämlich wieder "admin/build/module"

Ich weiss nicht wieso das so ist, wenn jemand einen Tip hat. Immer her damit.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Also ich habe keine Probleme

Eingetragen von Tobias Bähr (4019)
am 27.04.2009 - 22:24 Uhr

Also ich habe keine Probleme damit.

----------------------------------------

http://tobiasbaehr.de/
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wildcard Loader Arguments

Eingetragen von quiptime (4972)
am 27.04.2009 - 23:48 Uhr

Dein Code

<?php
$items
['user/%user/meinRegister'] = array(
         
'title' => 'Register im Userkonto',
         
'page callback' => 'meineRegister_function',
         
'page arguments' => array($user, 1),...
?>

Was soll 'page arguments' => array($user, 1) ? Ich denke das ist falsch.

Lese Dich auf drupal.org in wildcard arguments ein. Wildcard Loader Arguments

Wenn Du das mit dem 'page arguments' in die richtige Reihe bringst bist Du vermutlich auch das Problem mit den falschen arg()-Werten los.

Edit

Probier es mal damit:

<?php
$items
['user/%user/meinRegister'] = array(
 
'title' => 'Register in user account',
 
'page callback' => 'drupal_get_form',
 
'page arguments' => array(meineRegister_function, 1),
  ...
?>

In Deiner Callbackfunktion

<?php
meineRegister_function
($form_state, &$user)
?>
lasse Dir mal den Inhalt von $user anzeigen. Sollte es die User ID sein kannst Du damit das User Object laden. Eventuell ist es ja gleich das User Object. ;-)

------------------------
Quiptime Group

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke für die

Eingetragen von XPectIT@drupal.org (48)
am 28.04.2009 - 07:09 Uhr

Danke für die Antworten.

quiptime schrieb

Was soll 'page arguments' => array($user, 1) ? Ich denke das ist falsch.

Das passt so hoffe ich, aber es ist ziemlich unverständlich. Also $user ist der eingeloggte Benutzer (global $user;) und %user wird gleich als User-Object durch die 1 angesprochen.

quiptime schrieb

Lese Dich auf drupal.org in wildcard arguments ein. Wildcard Loader Arguments

Das habe ich ;-)
Wildcard usage and core's wildcards (im unteren 1/3 bei %user)

quiptime schrieb

<?php
$items
['user/%user/meinRegister'] = array(
 
'title' => 'Register in user account',
 
'page callback' => 'drupal_get_form',
 
'page arguments' => array(meineRegister_function, 1),
  ...
?>

In Deiner Callbackfunktion

<?php
meineRegister_function
($form_state, &$user)
?>

<?php
meineRegister_function
($form_state, &$user, $profil_seite_von)
?>

So sieht meine Callback-Funktion aus. Und das geht auch soweit.
Ich benötige
<?php

global $user;
$user->uid //vom aktuell die Seite anschauenden Benutzer und die
$profil_seite_von->uid // von demjenigen Benutzer, dessen Profil angezeigt wird
?>

drupal_get_form() rufe ich später in meineRegister_function() auf. Das funktioniert ja auch so.

Zu den falschen arg()-Werten:
Hier scheint bei mir etwas falsch zu laufen. Und es sind nicht nur die arg()-Werte.
Beispiel:

<?php

function hook_menu() {
global
$user;
items['meinRegister']
...
...
print_r($user);
...
?>

Gibt mir beim Aufruf von http://meineSeite.de/meinRegister das Userobject des Benutzers aus mit dem ich das Modul aktiviert habe.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Tu es bitte und sag mir was die Parameter-Variable $user enthält

Eingetragen von quiptime (4972)
am 28.04.2009 - 09:49 Uhr

<?php
meineRegister_function
($form_state, &$user, $profil_seite_von)
?>

Das kann so nicht sein wenn Du in der hook_menu() nur 1 Parameter an meineRegister_function() uebergibst:
<?php
array(meineRegister_function, 1),
?>

Weiterhin denke ich das Du in Deiner hook_menu() Funktion global $user NICHT benoetigst.
Das Argument %user arbeitet mit der globalen Wildcardfunktion user_load zusammen. Aus diesem Grund steht in der Callbackfunktion bereits das User Object zur Verfuegung.

Hast Du Dir in Deiner Callbackfunktion mal den Inhalt des Parameters $user anzeigen lassen?   Ja oder Nein? Tu es bitte und sage mir was die Parameter-Variable $user enthaelt.   <-- Mache dies aber ohne ein global $user in der Callbackfunktion.

Wie lautet die Bezeichnung Deiner hook_menu() Funktion in Deinem Modul?

 
Poste bitte den vollstaendigen Code Deiner Callbackfunktion und den dazu gehoerenden Part aus der hook_menu Funktion. Wo soll das Formular der Callbackfunktion auftauchen? Ist es ein eigenstaendiger Link oder soll es ein Tab sein?

------------------------
Quiptime Group

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich komme die nächsten paar

Eingetragen von XPectIT@drupal.org (48)
am 28.04.2009 - 21:37 Uhr

Ich komme die nächsten paar Tage nicht mehr an DIESE Testumgebung ran, aber ich habe mein Modul auf einer anderen D6-Seite installiert und dort geht alles wie gewünscht.

Scheinbar ist wirklich etwas an der Drupal-Installation nicht in Ordnung. Also sind wir sozusagen Off-Topic.

Das Modul soll den registrierten Drupal-Usern die Möglichkeit geben ihr eigenes Mumble-Passwort zu ändern, hat man die Berechtigung "administer users" kann man auch für andere Benutzer das Passwort ändern oder neue Mumble-user registrieren.
Das geht nur weil die Tabellen für Mumble in der Drupal-Datenbank erstellt wurden.

Mein Code sieht jetzt so aus:

<?php
/**
* Implementation of hook_menu().
*/
function mumbleuser_menu() {
 
$items = array();
     
// Ein Register unter /user da kann der Benutzer sein
// eigenes Mumble-Passwort setzen oder Benutzer mit
// Berechtigung 'administer users' können Fremde PW vergeben
       
$items['user/%user/mumbleuser'] = array(
         
'title' => 'Mumble Userkonto',
         
'page callback' => 'mumbleuser_password',
         
'page arguments' => array(1),
         
'type' => MENU_LOCAL_TASK,
         
'access arguments' => array('Zugriff Mumbleuser'),
         
'weight' => 2,
        );

// Einfache Seite auf der neue Benutzer im Mumble-Server
// registriert werden können.
 
$items['register/mumbleuser'] = array(
         
'title' => 'Mumble Benutzerregistrierung',
         
'page callback' => 'mumbleuser_password',
         
'page arguments' => array(),
         
'type' => MENU_CALLBACK,
         
'access arguments' => array('administer users'),
         
'weight' => 2,
  );
 
  return
$items;
}

function
mumbleuser_password(&$account=FALSE) {
//eine Hilfsfunktion die mittlerweile nichtmehr viel Sinn hat
   
global $user;
   
$output .= drupal_get_form('mumbleuser_password_form', $user, $account);
//  echo "<pre>";
//  print_r($user);
//  echo "</pre>";
 
return $output;
}

function
mumbleuser_password_form(&$form_state, $user, $account) {

  
$form['Mumbleuser']['text'] = array(
   
'#type' => 'fieldset',
   
'#title' => t('Mumbleuser erstellen oder aktualisieren'),
   
'#value' => "Mumbleuser = $account->name, User = $user->name",
   
'#collapsible' => FALSE,
   
'#collapsed' => FALSE,
  );

// Wenn kein $account gesetzt ist, gibt das eine
// Neuregistrierung mit Eingabe des Benutzernamens
// und die 'playerid' wird auf FALSE gesetzt.
 
if ($account) {
      
$form['Mumbleuser']['playerid'] = array('#type' => 'value', '#value' => $account->uid);
      
$form['Mumbleuser']['name'] = array('#type' => 'value', '#value' => $account->name);
      
$form['Mumbleuser']['email'] = array('#type' => 'value', '#value' => $account->name ."@totekrieger.de");
  } else {
      
$form['Mumbleuser']['text']['name'] = array(
       
'#type' => 'textfield',
       
'#title' => 'Benutzername',
       
'#description' => 'Der Name des neu zu registrierenden Benutzers, dieser Name
                           muss <b>eindeutig</b> sein! d.h. er darf nicht bereits verwendet
                           werden.'
,
       
'#size' => 20,
       
'#maxlength' => 20,
       
'#required' => TRUE,
       );

      
$form['Mumbleuser']['playerid'] = array('#type' => 'value', '#value' => FALSE);
      
$form['Mumbleuser']['email'] = array('#type' => 'value', '#value' => "nichteingetragen@totekrieger.de");
   }

//Passworteingabefelder im Klartext!
  
$form['Mumbleuser']['text']['password1'] = array(
   
'#type' => 'textfield',
   
'#title' => t('Das gewuenschte Password'),
   
'#size' => 20,
   
'#required' => TRUE,
  );

  
$form['Mumbleuser']['text']['password2'] = array(
   
'#type' => 'textfield',
   
'#title' => t('Das gewuenschte Password zum zweiten'),
   
'#size' => 20,
   
'#required' => TRUE,
  );

// Damit niemand sagen kann, ich habe wohl falsch geklickt!
// Der Name des Mumbleuser muss eingegeben werden  
 
if ($user->uid != $account->uid) {
   
$form['Mumbleuser']['text']['check'] = array(
      
'#type' => 'textfield',
      
'#title' => '<h3>Mir ist bewusst,<br>dass ich das Passwort fuer einen anderen Benutzer ('.$account->name.') setze!</h3><br>Gib hier den Namen des Nutzers ein!',
      
'#required' => FALSE,  
      
'#default_value' => "Namen Eingeben!", 
      
'#size' => 20,
     );
  } else {
// ...oder bei bekannten Usern wird es vom System erledigt
    
$form['Mumbleuser']['text']['check'] = array('#type' => 'value', '#value' => $account->name);
  }
 
$form['Mumbleuser']['senden'] = array('#type' => 'submit', '#value' => t('Submit'));

return
$form;
}
?>

Der Rest besteht aus validierung und Datenbankabfragen.

Es gibt noch eine Menge Erweiterungspotential, z.B. User wieder löschen zu können :-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Wochen 2 Tagen
  • Hey danke
    vor 2 Wochen 3 Tagen
  • Update: jetzt gibt's ein
    vor 2 Wochen 3 Tagen
  • Hallo, im Prinzip habe ich
    vor 3 Wochen 1 Tag
  • Da scheint die Terminologie
    vor 3 Wochen 1 Tag
  • Kannst doch auch alles direkt
    vor 3 Wochen 5 Tagen
  • In der entsprechenden View
    vor 3 Wochen 5 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 5 Tagen
  • gelöst
    vor 6 Wochen 2 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20456

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 24 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association