Modul-Entwicklung
Aktuelles Entwicklerhandbuch / Videotraining?
Eingetragen von darkangel (14) am 10.12.2011 - 17:01 Uhr inHallo miteinander,
da ich nun auch gern etwas für Drupal entwickeln möchte bin ich derzeit auf der Suche nach allen möglichen Informationen die mir bei der Entwicklung eigener Module behilflich sein könnten.
Günstiges Git-Deployment auf Hosteurope
Eingetragen von Peter Majmesku (656) am 05.12.2011 - 23:35 Uhr inHallo,
ich bin auf Hosteurope's FAQ-Seite unter http://faq.hosteurope.de/index.php?cpid=17810 gestossen. Hier wird gezeigt, dass die (preiswerten) VServer von Hosteurope auch Git beherrschen. Ich habe das Ganze einmal durchgespielt. Nach dem push auf des Git-Remote Repo (der V-Server von Hosteurope), genügt es dort
git checkout
Kommentar in einem Nodetyp automatisch freischalten per Hook
Eingetragen von NightWalker (36) am 30.11.2011 - 22:38 Uhr inHallo zusammen,
ich möchte, dass auf meine Seite alle Kommentare für fast alle Nodetypes per Hand frei geschaltet werden bis auf einen Nodetyp, bei diesem soll keine Freischaltung erforderlich sein.
Da ich noch kein 7er Modul dazu gefunden hab, versuche ich es selbst zu lösen.
Nach meinem verständnis sollte ich einfach den hook_comment_presave überschreiben können damit die Kommentare automatisch frei geschaltet werden.
Dazu habe ich in mein template.php folgenden Code eingefügt:
<?php
function meintheme_comment_presave($comment){
if ($comment->node_type=="commentlist_node"){
$comment->status=1;
}
$comment->subject = trim($comment->subject);
}
?>meintheme natürlich durch den namen von meinem theme ersetzt.
Habe ich mir das zu einfach vorgestellt oder irgendwo einen fehler?
Danke schon mal im Voraus
- Anmelden oder Registrieren um Kommentare zu schreiben
[Gelöst] Formular erscheint nicht
Eingetragen von Peter Majmesku (656) am 27.11.2011 - 02:44 Uhr inWill mit meinem Mini-Modul die Anzeige eines weiteren Formulars erreichen. Hierzu habe ich mir andere Module angesehen, die per FAPI ein Formular mitbringen. Erhalte jedoch im Frontend keinerlei Ausgabe. Fällt jemandem zu Folgendem etwas ein?
<?php
function uc_auction_instant_buy_form(&$form_state, $node, $teaser) {
$form = array(
'#node' => $node,
'#teaser' => $teaser,
'#theme' => 'uc_auction_instant_buy',
'foobar' => array(
'#title' => t('High bid'),
'#type' => 'item',
'#value' => 1,
'#weight' => 2,
),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 1,
'#description' => 'foobar',
'#weight' => 8,
);
return $form;
}
function uc_auction_instant_buy_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
if ($op === 'view' && isset($node->uc_auction)) {
$node->content['uc_auction_instant_buy'] = array(
'#value' => drupal_get_form('uc_auction_instant_buy_form', $node, $a3),
'#weight' => 0,
);
}
}
/**
* Implementation of hook_theme().
*/
function uc_auction_instant_buy_theme($existing, $type, $theme, $path) {
return array(
'uc_auction_instant_buy' => array(
'arguments' => array('form' => NULL),
),
);
}
/**
* Implementation of hook_form_alter().
*/
function uc_auction_instant_buy_form_alter(&$form, $form_state, $form_id) {
if (user_access('create auctions') && $form_id == 'product_node_form') {
$instant_buy_price = array(
'instant_buy_price' => array(
// This weird #type thing is explained below.
'#type' => 'textfield',
'#title' => t('Instant buy price'),
'#description' => t('Type in the price, for which the customer should by the product directly.'),
'#field_suffix' => '€',
'#size' => 12,
'#weight' => 5,
),
);
array_push($form['base']['auction'], $instant_buy_price);
$form['#submit'][] = 'uc_auction_instant_buy_submit';
$form['#validate'][] = 'uc_auction_instant_buy_validate';
}
}
function uc_auction_instant_buy_submit(&$form, &$form_state) {
$record = array(
'nid' => $form_state['values']['nid'],
'amount' => str_replace(',', '.', $form_state['values']['instant_buy_price']),
);
drupal_write_record('uc_auction_instant_buy', $record, 'nid');
}
/**
* Validate new auction creation.
*/
function uc_auction_instant_buy_validate($form, &$form_state) {
if (!is_numeric(str_replace(',', '.', $form_state['values']['instant_buy_price']))) {
form_set_error('instant_buy_price', t('Please check the instant buy price.'));
}
}
?>Eigene Fields definieren oder bestehende Fields verwenden?
Eingetragen von cjoy (4) am 26.11.2011 - 01:42 Uhr inNachdem ich im IRC unterschiedliche Auskünfte auf die Frage erhalten habe, probiere ich es noch einmal hier im Forum.
Meine Frage ist nicht so sehr, wie man ein eigenes Field via module definiert (das ist prima dokumentiert), sondern wann es Sinn macht und welche Alternativen ggf. zu nutzen wären.
- Anmelden oder Registrieren um Kommentare zu schreiben
- Weiterlesen
[gelöst] hook_theme() Funktion
Eingetragen von DragWyatt (3) am 24.11.2011 - 19:20 Uhr inHallo,
ich programmiere mit Drupal erst seit ein paar Tagen Module, und bin noch ein totaler Anfänger.
Ich möchte gerne eine art "Neuigkeiten" - Funktion programmieren wie es sie bei Facebook gibt. Also der Nutzer kann in ein Textfeld reinschreiben was er z.B. gerade macht und daunter sollten die Meldungen von ihm oder anderen Nutzern dann angezeigt werde.
Nun habe ich es soweit geschafft das ein Textfeld angezeigt wird und die dort reingeschrieben sachen in einer Datenbank gespeichert werden. Nur hab ich ein Problem mit der Ausgaben, untzwar sollten unter dem Textfeld dann die Meldungen aus der Datenbank ausgelesen werde. Dafür habe ich eigentlich gedacht ich mache das mit der hook_theme() Funktion, und lasse dann die Datensätze in einer tpl Datei auslesen und unterdem texfeld anzeigen. Allerdings wird mir nichts angezeigt. Ich bekomme es nichtmal hin einen einfachen Satz auszugeben. Hier mein Code:
<?php
function stream_menu() {
$items['stream'] = array(
'title' => 'Stream',
'page callback' => 'drupal_get_form',
'page arguments' => array('stream_form'),
'access arguments' => array('use_stream'),
);
return $items;
}
function stream_theme() {
return array(
'stream_form' => array(
'arguments' => array('form' => NULL),
'render element' => 'form',
'template' => 'stream-form',
),
'stream_view' => array(
'arguments' => array('var' => NULL),
'template' => 'stream-view',
),
);
}
function stream_form($form, &$form_state) {
$form['text'] = array(
'#type' => 'textfield',
'#title' => t('Please input something!'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Go'),
);
return $form;
}
function stream_view($var){
}
function stream_form_submit($form, &$form_state) {
// hier wird die Eingabe in der Datenbank gespeichert
}
function template_preprocess_stream_form(&$variables) {
$variables['text_form_content'] = array();
$text_form_hidden = array();
foreach (element_children($variables['form']) as $key) {
$type = $variables['form'][$key]['#type'];
if ($type == 'hidden' || $type == 'token') {
$text_form_hidden[] = drupal_render($variables['form'][$key]);
}
else {
$variables['text_form_content'][$key] = drupal_render($variables['form'][$key]);
}
}
$variables['text_form_content']['hidden'] = implode($text_form_hidden);
$variables['text_form'] = implode($variables['text_form_content']);
}
?>Was muss ich nun in die Funktion stream_view schreiben, damit das ganze angezeigt wird.
Vielen dank schonmal ;)
lg, DragWyatt
[GELÖST] Form API: Nach hook_form_validate(); Formularwerte in Datenbank speichern
Eingetragen von Peter Majmesku (656) am 23.11.2011 - 20:44 Uhr inWelcher Hook wird nach hook_form_validate(); aufgerufen, von dem aus man kontrollierte Daten nochmals bearbeiten kann?
Gelöst, siehe: http://www.drupalcenter.de/node/38506.
- Anmelden oder Registrieren um Kommentare zu schreiben
[GELÖST] Speicherung in Datenbank durch Formular
Eingetragen von Peter Majmesku (656) am 23.11.2011 - 20:43 Uhr inHallo,
habe ein Mini-Modul programmiert und ein Schema für die Datenbank in der .install-Datei angelegt:
<?php
function uc_auction_time_controlled_publish_schema() {
return array(
'uc_auction_time_controlled_publish' => array(
'description' => 'Information about time controlled publish.',
'fields' => array(
'nid' => array(
'description' => 'The {node}.nid of the product.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
'publish' => array(
'description' => 'The time when this auction should be published.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
),
'primary key' => array('nid'),
'indexes' => array(
'publish' => array('publish'),
),
),
);
}
?>Dadurch wird bei der Installation es Moduls in der Datenbank eine eigene Tabelle erstellt. Prima.
Durch
<?php
$auction_publish = array(
'publish' => array(
'#type' => 'date_popup',
'#title' => t('Publishing date and time'),
'#description' => t('Select a date and time when this auction will be published (relative to the server’s local time).'),
'#default_value' => format_date(time(), 'custom', 'Y-m-d H:i:s'),
'#weight' => 10,
),
);
array_push($form['base']['auction'], $auction_publish);
?>erscheint auch mein Feld im Formular, welches bis nach hook_form_validate(); einen Wert bringen kann, den ich gerne in der zuvor angelegten DB-Tabelle abspeichern will.
Leider wird dieser Wert nicht gespeichert. Ich kenne auch sonst keinen Hook, welcher nach hook_form_validate(); kommt und mit welchem ich per SQL-Query meinen Wert in die Datenbank befördern kann. Hat jemand eine Idee?
Modul zur Anbindung von geotoad (Caches-Abfrage auf geocaching.com)
Eingetragen von ab_connor (20) am 20.11.2011 - 21:52 Uhr inLiebe Wissende,
ich möchte die Entwicklung eines Moduls zur Anbindung von geotoad initiieren. Folgender Hintergrund:
[gelöst] Probleme mit $form_state beim ahah-helper
Eingetragen von Flyentology (2) am 13.11.2011 - 21:05 Uhr inHey,
Bin relativ neu mit Drupal unterwegs, aber ich stecke fest und finde nichts was mir irgendwie weiterhilft.. (ahah-helper seiten von drupal, andere Beispielcodes und so weiter..)
Ich habe mehrere Textfelder. Die Eingaben sollen eine vorher nicht sichtbare Tabelle erscheinen lassen (langfristiges Ziel: Datenbankvergleich und die Treffer in der Tabelle ausgeben). Aber langsam, im Moment will ich lediglich die $form_state['values'] benutzen, was nicht klappt, so als ob formstate leer wäre
Nur um nochmal kurz den größeren Zusammenhang zu erklären, ich möchte also Eingaben machen, auf den Button klicken, dann eine Tabelle erhalten mit allen Treffern aus der Datenbank.. Theoretisch dachte ich mir, dass ich genau diese $form_state['values'] eben bei der Datenbankabfrage später entsprechend vergleiche.
Wie im Titel erwähnt, benutze ich den AHAH-Helper und der gekürzte Code sieht folgendermaßen aus:
<?php
function aebuisadmin_form($formstate) {
$form = array();
ahah_helper_register($form, $form_state);
$form['workspace'] = array(
'#type' => 'fieldset',
'#title' => t('Eingabe'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
'#tree' => TRUE,
'#prefix' => '<div id="display-wrapper">',
'#suffix' => '</div>',
);
$form['workspace']['id'] = array(
'#type' => 'textfield',
'#title' => t('ID'),
'#default_value' => $form_state['values']['workspace']['id'],
'#size' => 30,
'#maxlength' => 30,
'#weight' => 1,
);
$form['workspace']['display'] = array(
'#type' => 'submit' ,
'#value' => t('Display'),
'#weight' => 7,
'#tree' => TRUE,
// wrapper eigenschaften:
'#ahah' => array(
'event' => 'click',
'path' => ahah_helper_path(array('workspace')),
'wrapper' => 'display-wrapper',
'effect' => 'fade',
'method' => 'replace',
'progress' => array('type' => 'bar', 'message' => t('Loading...'))
),
);
if($form_state['values']['workspace']['id'] != '') { // habs auch mit if(isset...) versucht, aber das geht auch nicht
$id = $form_state['values']['workspace']['id'];
//das soll mal die Tabelle werden.. über 'item' kann man sich sicher streiten, darum solls aber nich gehen
$form['workspace']['tabelle'] = array(
'#type' => 'item',
'#title' => t('Tabelle'),
'#weight' => 13,
'#value' => $id,
);
}
return $form;
}
function aebuisadmin_form_submit($form, $form_state){
// hier hab ich testweise verschiedene drupal_set_messages gesetzt, um zu überprüfen, ob hier die $form_state['values'] erkannt werden
// und das werden sie auch
// ich lass mir halt die eingetrage ID als Drupal_message ausgeben
}
?>Folgendes Problem: Ich verstehe einfach nicht, wieso die if-verzweigung vor meinem item den $form_state von meinem ID-Feld nicht erkennt..
So wie ich den AHAH-Helper verstanden habe, müsste er beim Klick auf den Button den eingetragen Wert aus dem Textfeld in $form_state['values']['workspace']['id'] speichern und nach dem Wrappen eben in sofern benutzen, dass die Tabelle überhaupt erstmal erscheint.. oder irgendwie so
Habs auch mit devel + dpm($form_state); versucht..wurde nicht schlau draus..weil rein gar nichts angezeigt wird
Und sicherlich gibts für mein Anliegen auch andere, bessere und elegantere Lösungen, aber mittlerweile gehts ums Prinzip :)
Hat jemand einen Denkanstoss? Ich glaube ich hab die Logik des wrappers irgendwie einfach nich verstanden..
Gruß

Neue Kommentare
vor 2 Tagen 11 Stunden
vor 1 Woche 6 Tagen
vor 1 Woche 6 Tagen
vor 9 Wochen 4 Tagen
vor 9 Wochen 4 Tagen
vor 9 Wochen 5 Tagen
vor 10 Wochen 2 Tagen
vor 10 Wochen 3 Tagen
vor 11 Wochen 7 Stunden
vor 11 Wochen 7 Stunden