[gelöst] Content Type oder Page Template für den Inhalt des eigenen Moduls festlegen
am 09.02.2010 - 12:57 Uhr in
Hallo zusammen,
ich habe folgendes Problem und würde mich über einen Tipp oder eine Lösung sehr freuen.
Unser Unternehmen bietet ein CRM System für die Immobilienbranche an. Ich entwickle für unsere Kunden ein Drupal-Modul, mit dem sie ihre Immobilien aus unserem System auslesen und auf ihrer Drupal-Webpage anzeigen lassen können.
Dafür gibt es in meinem Modul z.B. folgende Funktion, die über einen Drupal-Path von dem Suchformular aufgerufen wird:
/**
* Displayes all inventories depending on your search results.
*/
function modulname_listing() {
/* Code to get the all data */
return theme('modulname_listing',$inventories,$pages,$page_url,$current_page,$search_parameters);
}
auch das Theme wird korrekt initialisiert:
/**
* Implementation of hook_theme().
*/
function modulname_theme() {
return array(
'modulname_listing' => array(
'arguments' => array(
'inventories' => NULL,
'pages' => NULL,
'page_url' => NULL,
'current_page' => NULL,
'search_parameters' => NULL
),
'template' => 'modulname-listing'
),
);
}
und die URL verlinkt:
/**
* Implementation of hook_menu().
**/
function modulname_menu() {
$items = array();
$items['modulename/listing'] = array(
'title' => 'Modulname Listing',
'page callback' => 'modulname_listing',
'access arguments' => array('access modulname content'),
'type' => MENU_CALLBACK
);
return $items;
}
Das Ganze funktioniert wie gewünscht und zeigt den Inhalt korrekt an. Für das umliegende HTML Gerüst der Seite wird die page.tpl.php des Themes verwendet.
Ich würde dieses umliegende HTML Gerüst gerne im Theme besser gestalten können. Natürlich kann ich für alle 'normalen' Content Types (Story, Page, Article) ein eigenes Template (siehe http://drupal.org/node/249726) erzeugen, aber sauberer wäre es, wenn mein Modul seinen Content mit einem eigenen Content Type anzeigt und ich diesen per Template individuell designen kann.
Meine Frage ist:
Wie gebe ich im Modul an, von welchem Content Type die Ausgabe sein soll?
Ich habe dazu bisher nichts gefunden und wäre für Links, Tipps oder Hilfen dankbar.
Viele Grüße,
Konstantin
- Anmelden oder Registrieren um Kommentare zu schreiben
Hallo Konstantin, ich bin
am 09.02.2010 - 15:06 Uhr
Hallo Konstantin,
ich bin nicht ganz sicher, ob ich die Frage richtig verstanden habe.
Meinst du vielleicht das hier:
/**
* Implementation of hook_node_info().
*/
function modulname_node_info() {
return array(
'modulname' => array(
'name' => t('Type name'),
'module' => 'modulname',
'description' => t('...'),
'has_title' => TRUE / FALSE,
'title_label' => t('...'),
'has_body' => TRUE / FALSE,
'body_label' => t('...'),
'locked' => TRUE / FALSE,
),
);
}
Vielleicht hilft es ja weiter. Mit diesem Hook machst du Drupal deinen Inhaltstypen bekannt.
Alternativ kannst du das auch(also keinen neuen Typen, sondern auf einen verweisen) so machen, dass du die Nodetypen in hook_menü anwählbar machst; also sagst, welcher Typ angesprochen werden soll.
Sieh doch mal drupal_get_types(...); in der http://api.drupal.org an. Mehr kann ich dazu nicht sagen.
Gruss
Fredi
___________________________________________________________________________
Wenn Frage beantwortet wurde, bitte [gelöst] in den Titeleintrag schreiben.
Hi Fredi, vielen Dank für
am 09.02.2010 - 19:05 Uhr
Hi Fredi,
vielen Dank für Deine schnelle Antwort.
Den hook node_info() habe ich bereits selber gefunden, jedoch die Doku so verstanden, dass man damit nur einen neuen Content Type für zukünftige Node's generiert.
Nach Deinem Beitrag und einem erneuten Lesen der Doku verstehe ich das jetzt so, dass meine Funktion 'listing' quasi einen Node erzeugt und ich mit dem Hook node_info() den Content Type dieses Nodes setzten kann. Der Content Type muss (darf) dabei nicht bereits im System als Custom oder Default Content Type existieren.
Ich werde es so schnell wie möglich testen.
EDIT: Funktioniert super, nur der neue Content Type wird jetzt dem Administrator angezeigt, was ich gerne verhindert hätte.
Aber ist nicht so schlimm. Problem gelöst :D
Vielen Dank nochmal,
Konstantin