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

Modul mit unterschiedlichen Konfigurationen einbinden

Eingetragen von chris@drupal (20)
am 31.01.2014 - 15:47 Uhr in
  • Modul-Entwicklung
  • Drupal 7.x

Hallo zusammen,

ich bin seit einigen Wochen begeisteter Drupal 7 Anfänger - leider eben auch nur Anfänger.

Ich schreibe gerade mein erstes Modul und möchte dieses Modul mit unterschiedlichen Konfigurationen auf unterschiedlichen Seiten integrieren.

Das Ziel hierbei ist, dass ich nur ein Modul habe, welches eine parametrisierte Business Logik implementiert, die ich auf unterschiedlichen Seiten mit unterschiedlichen Konfigurationen ansprechen kann.

Zur Veranschaulichung habe ich folgenden Aufbau in meinem Modul - bereits mit einigen Hooks implementiert:

Die folgenden beiden Funktionen stellen meine Business Logik da, die ich gerne wiederverwenden möchte:

getContent($parameter) legt nur ein DIV um das HTML Snippet und
getContentAsHTMLUsing($parameter) liefert entweder HTML Snippet A oder HTML Snippet B

<?php
function getContent($parameter) {
   
$pageResults = '';
   
$pageResults .= getContentAsHTMLUsing($parameter);
 
   
$output = '<div>'. $pageResults;
   
$output .= '</div>';
    return
$output;
}
// function


function getContentAsHTMLUsing($parameter) {
 
   
// If value of $parameter == 1 then doA();
 
    // If value of $parameter == 2 then doB();
 
 
return $results;

} 
// function
?>

Darüber hinaus habe ich noch folgende Hooks implementiert:

hook_block_view() liest den Parameter aus und ruft getContent($parameter) bzw. getContentAsHTMLUsing($parameter) auf.
hello_world_block_configure() für die Konfiguration des Parameters.
hello_world_block_save() zum Speichern der Konfiguration.

<?php
/**
* Implements hook_block_view().
*/
function hello_world_block_view($delta = '') {
 
$block = array();

  if (
$delta == 'hello_world') {
 
   
// Assign Configuration to Variables
   
$parameter = variable_get('hello_world_block_parameterID', '1');
     
   
$block['subject'] = t('My Subject');
   
$block['content'] = getContent($parameter);
  }

  return
$block;
}

/**
* Implements hook_block_configure().
*
*
*/
function hello_world_block_configure($delta = '') {
   
$form = array();

    if (
$delta == 'hello_world') {
       
$form['hello_world'] = array(
           
'#type' => 'fieldset',
           
'#title' => t('Hello World Module Options'),
        );
   
       
// Parameter 1
       
$form['hello_world']['hello_world_block_parameterID'] = array(
         
'#type' => 'textfield',
         
'#title' => t('Parameter'),
         
'#default_value' => variable_get('hello_world_block_parameterID', '1'),
        );
       
    }
 
    return
$form;
}

/**
* Implements hook_block_save().
*
*
*/
function hello_world_block_save($delta = '', $edit = array()) {
  if (
$delta == 'hello_world') {
   
variable_set('hello_world_block_parameterID', $edit['hello_world_block_parameterID']);
  }
}
?>

Bis hierhin ist alles gut - nun möchte ich aber auf unterschiedlichen Seiten dieses Modul integrien, jedoch mit unterschiedlichen Konfigurationen:

Seite 1: Modul mit Parameter Wert 1 -> liefert dann das HTML Snippet A

Seite 2: Modul mit Parameter Wert 2 -> liefert dann das HTML Snippet B

Ich habe schon eine ganze Weile in Foren gesucht und bin mir auch nicht sicher, ob dies überhaupt der richtige Ansatz ist,
um das Problem zu lösen.

Hat jemand vielleicht eine Idee, einen Link, etc.? Gerne auch Kritik, daß ich auf dem totalen Holzpfad bin oder den Wald vor lauter Bäumen nicht mehr sehe.

Cheers,
Chris@Drupal

‹ API für Drupal erstellen? Modul mit unterschiedlichen Konfigurationen einbinden ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

ich bin kein Programmierer, aber

Eingetragen von silvesterd (268)
am 31.01.2014 - 17:21 Uhr

welches Modul von der gefühlten halben Million Module käme denn am nächsten? Was ist denn die Aufgabe?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Modul mit unterschiedlichen Konfigurationen einbinden

Eingetragen von chris@drupal (20)
am 01.02.2014 - 11:44 Uhr

Hallo silvestered,

in der

<?php
function getContentAsHTMLUsing($parameter) {

// If value of $parameter == 1 then doA();

// If value of $parameter == 2 then doB();

return $results;

}
// function
?>

möchte ich einen WebService aufrufen - vereinfacht gesagt ein HTTP Request, der unterschiedliche Parameter hat.

Die einzelnen Parameter möchte ich aber nicht "hard coden", sondern über konfigurierbare Parameter gestalten.

Das funktioniert auch soweit gut und der WebService liefert dann auch die entsprechenden Ergebnisse.

Ich glaube, dass man von der Webservice Thematik auch abstrahieren kann und einfach sagt:

doA() liefert HTML Snippet A und
doB() liefert HTML Snippet B.

Das Problem ist, dass ich derzeit nicht weiss, wie man unterschiedliche Aufrufe eines Moduls auf Seiten integrieren kann.

Vielleicht ist das auch ein Problem, der Verwendung der falschen Hooks an dieser Stelle.

Was ich möchte skizziere ich einfach mal:

Ich habe zwei Seiten: Basic Page A und Basic Page B.

Der Content auf den beiden Seiten soll ein einziges Modul liefern -> eben über die funktion getContentAsHTMLUsing($parameter).

Auf der Seite A soll der Parameter-Wert 1 sein und auf der Seite B soll der Parameter-Wert 4711 sein.

Die beiden unterschiedlichen Paramter 1 & 4711 möchte ich aber konfigurierbar halten, damit ein nicht WebService Programmierer diesen Aufruf über das Backend einstellen kann.

Verwende ich möglicherweise die falschen Hooks?

Cheers,
Chris

  • Anmelden oder Registrieren um Kommentare zu schreiben

Abstrakt

Eingetragen von silvesterd (268)
am 31.01.2014 - 21:10 Uhr

Hi Chris,

das ist hübsch abstrakt und so gar nicht mein Tisch. Vor einigen Jahren hatte ich mal begonnen, eine Installation und eine Datenbank für zwei Websites zu verwenden. Prinzipiell ist das möglich, war mir dann aber zu unübersichtlich. Der Vorteil lag nur daran, weniger Webressourcen zu verwenden und nicht doppelten Wartungsaufwand zu haben. Stünde ich heute vor einer ähnlichen Aufgabe wie der von dir geschilderten, würde ich im Kopf mit Modul-Begriffen wie Reference und Context jonglieren und die passenden Module suchen.

Dir wünsche ich, dass sich noch jemand mit den passenden Kenntnissen meldet und bin gespannt auf die Fortschritte.

Viel Glück!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zitat: Das Problem ist, dass

Eingetragen von quiptime (4972)
am 31.01.2014 - 23:26 Uhr
Zitat:

Das Problem ist, dass ich derzeit nicht weiss, wie man unterschiedliche Aufrufe eines Moduls auf Seiten integrieren kann.

Schreibe ein Stück Adminkode mit dem man eine Systemvariable konfigurieren kann. Mit dieser Variable ruft man Sitebezogen eine Funktion auf.

  • Anmelden oder Registrieren um Kommentare zu schreiben

quiptime schrieb Zitat: Das

Eingetragen von chris@drupal (20)
am 01.02.2014 - 12:20 Uhr
quiptime schrieb
Zitat:

Das Problem ist, dass ich derzeit nicht weiss, wie man unterschiedliche Aufrufe eines Moduls auf Seiten integrieren kann.

Schreibe ein Stück Adminkode mit dem man eine Systemvariable konfigurieren kann. Mit dieser Variable ruft man Sitebezogen eine Funktion auf.

Hallo quiptime,
Danke für Dein Feedback - aber ich befürchte, daß hier ein kleines Missverständis vorliegt. Ich habe inzwischen den Content überarbeitet, damit das Problem etwas klarer wird.
Ich möchte gar nicht zwei unterschiedliche (Web-) Sites konfigurieren können und ich hoffe, daß sich das Problem trivialer lösen lässt.
Hier noch einmal die Motivation:

Eine WebSite mit zwei Instanzen vom Content Type Basic Page >> Page A und Page B.
Zusätzlich ein HelloWorld Modul, mit einem Parameter, der konfigurierbar sein soll.

Dieser Parameter entscheidet, ob im HelloWord Modul function A() oder funktion B() aufgerufen wird (siehe oben).
Die beiden Funktionen A() und B() liefern jeweils HTML-Code, der nun angezeigt werden soll.
Auf der Basic Page A das Ergebnis des Modulaufrufes mit dem Ergebnis von Funktion A() und
auf der Basic Page B das Ergebnis des Modulaufrufes mit dem Ergebnis von Funktion B()

Verwende ich vielleicht die falschen Hooks oder ist schon mein Ansatz, dies über einen Block abzubilden nicht der richtige Weg?

Cheers,
Chris

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo, vielleicht hilft Dir

Eingetragen von oteno (775)
am 01.02.2014 - 12:42 Uhr

Hallo,
vielleicht hilft Dir das hier weiter: http://stackoverflow.com/questions/5908473/howto-output-html-from-drupal...
Gruß
Christian

  • Anmelden oder Registrieren um Kommentare zu schreiben

Was grundsätzliches zur Modul

Eingetragen von quiptime (4972)
am 01.02.2014 - 12:53 Uhr

Was grundsätzliches zur Modul Programmierung. Wenn Du drupallike arbeiten willst, das solltest Du, dann lies Dich in die Codingstandards von Drupal ein.

Bsp.: Deine Funktion getContent

Besser ist: mymodulename_get_content() oder _mymodulename_get_content()

Funktionsnamen mit beginnendem Unterstrich kann man für Modulinterne (Hilfe)Funktionen verwenden die auch nicht von ausserhalb des Modules angesprochen werden.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zitat: Verwende ich

Eingetragen von quiptime (4972)
am 01.02.2014 - 13:04 Uhr
Zitat:

Verwende ich vielleicht die falschen Hooks oder ist schon mein Ansatz, dies über einen Block abzubilden nicht der richtige Weg?

Das kann man in dieser Situation nicht wirklich beantworten.

Es kommt darauf an was Dein Modul realisieren soll.

Bei einem Modul mit Blockfunktionalität bewegst Du Dich mit den obigen Hooks erst Mal richtig.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Dein Code. Warum willst Du

Eingetragen von quiptime (4972)
am 01.02.2014 - 13:20 Uhr

Dein Code.

Warum willst Du zur Laufzeit der Website, Anzeige einzelner Inhalte, den Block umkonfigurieren?

Eigentlich brauchst Du doch nur den hook_block_view().

Bedeutet, der angezeigte Inhalt des Block wird zur Laufzeit verändert (oder auch nicht). Der Block selbst aber mit seiner (Grund)Konfiguration wird nicht verändert.

  • Anmelden oder Registrieren um Kommentare zu schreiben

quiptime schrieb Was

Eingetragen von chris@drupal (20)
am 01.02.2014 - 13:36 Uhr
quiptime schrieb

Was grundsätzliches zur Modul Programmierung. Wenn Du drupallike arbeiten willst, das solltest Du, dann lies Dich in die Codingstandards von Drupal ein.

Bsp.: Deine Funktion getContent

Besser ist: mymodulename_get_content() oder _mymodulename_get_content()

Funktionsnamen mit beginnendem Unterstrich kann man für Modulinterne (Hilfe)Funktionen verwenden die auch nicht von ausserhalb des Modules angesprochen werden.

Danke für den Hinweis - Codingstandards sind extrem wichtig. getContent() soll auch nur eine interne Methode ein, die aus dem block_view hook aufgerufen wird,
daher werde ich diese in _getContent() ändern. okay? & thx.

  • Anmelden oder Registrieren um Kommentare zu schreiben

quiptime schrieb Dein

Eingetragen von chris@drupal (20)
am 01.02.2014 - 13:59 Uhr
quiptime schrieb

Dein Code.

Warum willst Du zur Laufzeit der Website, Anzeige einzelner Inhalte, den Block umkonfigurieren?

Eigentlich brauchst Du doch nur den hook_block_view().

Bedeutet, der angezeigte Inhalt des Block wird zur Laufzeit verändert (oder auch nicht). Der Block selbst aber mit seiner (Grund)Konfiguration wird nicht verändert.

Hallo quiptime,
Danke für den Hinweis. Mittlerweilse glaube ich, daß ich ein falsches Verständnis von Blocks habe und glaube, daß die richtige Lösung nicht mehr weit entfernt ist - Dank Deiner Kommentare.
Vielleicht noch mal zum Hintergrund:
Mein HelloWorld Modul ruft einen WebService auf, der ein HTML Snippet liefert. In der funktion _A() wird dieser Webservice Call ein HTML Snippet A liefern und in der Funktion _B() ein anderes. Gesteuert soll das ganze über einen Parameter werden, der aber nicht hardcoded werden soll, da auch Anwender mit keinen PHP / WebService Kenntnissen diesen konfigurieren können. Daher kam ich erst einmal auf die Idee, block hooks zu verwenden mit configure & save.

Anschließend habe ich dann eine Node bzw. Instanz von Basic Page >> MyFirstPage angelegt, den Block in die Area Content/Inhalt gelegt und zum Schluss noch konfuguriert, daß der Inhalt des Blocks HelloWorld nur auf MyFirstPage erscheinen soll. Daher glaube ich auch, daß dieser Ansatz schon nicht richtig ist.

Was ich benötige ist einfach die Möglichkeit, Content von einem Modul auf eine bzw. mehere Seiten (nodes) zu bringen. Und einen Mechanismus, mit dem ich sagen kann:
Seite (Node) A: zeige mir den Inhalt des Modulausrufes HelloWorld mit dem Parameter ('1") an und
Seite (Node) B: zeige mir den Inhalt des Modulausrufes HelloWorld mit dem Parameter ('4711') an

wobei der Wert des Parameters von einem Redakteur bzw. NICHT PHP Experte konfiguriert werden kann.

Cheers & Thx for great comments!
Chris

  • Anmelden oder Registrieren um Kommentare zu schreiben

Warum willst Du unbedingt an

Eingetragen von wla (9461)
am 01.02.2014 - 16:22 Uhr

Warum willst Du unbedingt an Drupal vorbei arbeiten? Wozu dann noch Drupal?
Ich würde das mit hook_menu lösen und echte Unterseiten definieren. Der Redakteur ist ohnehin mit dem Code überfordert.
Willst Du aber viele Stückchen vom Redakteur zusammensetzen lassen, solltest Du Dich mit Panelizer befassen.

Beste Grüße
Werner

  • Anmelden oder Registrieren um Kommentare zu schreiben

Bis hierher dachte ich zu

Eingetragen von quiptime (4972)
am 01.02.2014 - 20:46 Uhr

Bis hierher dachte ich zu verstehen was Du willst.

Dann kommt dieser Satz:

Zitat:

Was ich benötige ist einfach die Möglichkeit, Content von einem Modul auf eine bzw. mehere Seiten (nodes) zu bringen.

Das kapiere ich absolut nicht. Und so lange mir das nicht klar ist kann ich Dir wohl nicht wirklich helfen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

quiptime schrieb Bis hierher

Eingetragen von chris@drupal (20)
am 01.02.2014 - 21:27 Uhr
quiptime schrieb

Bis hierher dachte ich zu verstehen was Du willst.

Dann kommt dieser Satz:

Zitat:

Was ich benötige ist einfach die Möglichkeit, Content von einem Modul auf eine bzw. mehere Seiten (nodes) zu bringen.

Das kapiere ich absolut nicht. Und so lange mir das nicht klar ist kann ich Dir wohl nicht wirklich helfen.

Hallo quiptime,
Danke für Dein Feedback. Sorry, aber was genau verstehst Du an diesem Satz nicht? Bisher war das Problem doch klar oder ist die Lösung vielleicht zu trivial?

Cheers,
Chris

  • 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 19 Stunden
  • Hey danke
    vor 2 Wochen 1 Tag
  • Update: jetzt gibt's ein
    vor 2 Wochen 2 Tagen
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 6 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 6 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 4 Tagen
  • In der entsprechenden View
    vor 3 Wochen 4 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 4 Tagen
  • gelöst
    vor 6 Wochen 16 Stunden
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 1 Tag

Statistik

Beiträge im Forum: 250233
Registrierte User: 20453

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 23 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