Hello,
har nu suttit och letat i några dagar efter olika lösningar och färdiga koder för att få en förståelse, men tycker det finns väldigt lite.
Vill ha 50 olika färdiga lösningar i olika sammanhang för att få en gripande förståelse om olika punkter...
vänder mig därför till gurus.
Jag håller på med min första modul där tanken är att man ska kunna publicera enkelt flash innehåll på drupal.
har nu kommit till den biten när man ska välja en SWF fil från en specifik mapp men utmaningen som jag stött på är följande...
jag vill ha flera fält som ska fyllas i bl.a. ska man välja en SWF fil från select. men jag lyckas inte ens spara vilken swf fil är markerad i select-boxen...
så ser min kod ut just nu...
(not: jag kommer lägga till fler textfält för att ex. mata in bredd och höjd, bg-färg osv)
men måste först förstå hur jag sparar överhuvudtaget... hur får jag det sen ut igen.
all hjälp/förklarning/exempelkod är varmt uppskattat!
function flashmodul_form_alter(&$form, $form_state, $form_id) {
global $base_url;
drupal_set_html_head('<script type="text/javascript" src="'.drupal_get_path('module','flashmodul').'/swfobject.js"></script>');
$node_types = variable_get('flashmodul_node_types', array());
$form_type = $form['type']['#value'];
$swfMediaFolder = variable_get('flashmodul_folder','');
$fileList = file_scan_directory($swfMediaFolder, '.swf', array('.', '..', 'CVS'), 0, false);
$fileArr = array();
foreach ($fileList as $file){
array_push($fileArr,$file->basename);
}
if ($form['#id'] == 'node-form' && $node_types[$form_type] && user_access('use flashmodul')) {
$form['flashmodul_node'] = array(
'#type' => 'fieldset',
'#title' => t('FlashModul'),
'#description' => t('Select SWF file to publish in this node.'),
'#collapsible' => true,
'#collapsed' => false
);
$form['flashmodul_node']['swf_files'] = array(
'#type' => 'select',
'#title' => t('Listing SWF files in folder "<em>root/'.$swfMediaFolder.'</em>"'),
'#default_value' => variable_get('flashmodul_node_swf',''),
'#options' => $fileArr,
'#multiple' => true
);
$form['#submit'][] = 'flashmodul_submit';
}
//drupal_get_form('flashmodul_node',$form);
return $form;
}
/** Det är är något jag satt och testade med bara **/
function flashmodul_submit($form, &$form_state){
$node = new StdClass();
$node->type = 'apply';
$node->status = 1;
// We are using the title as First Name
$node->flash = $form_state['flashmodul']['swf_files'];
/* $node->body = $form_state['values']['address'];
$node->field_last[0]['value'] = $form_state['values']['last_name'];
*/
node_save($node);
drupal_set_message(t('Your application has been saved.'));
}
Comments
Hej och välkommen
Hej och välkommen Danel!
Utifrån din beskrivning på vad du vill göra, är jag inte säker på varför du skriver en egen modul. Jag kanske fullständigt missförstår vad du vill göra, men tycker att FileField och SWF-Tools passar in ganska bra på din beskrivning. Att använda dessa färdiga moduler skulle bespara dig en hel del arbete.
Hej,
Hehe, precis vad som stod i Drupal boken som Falk skrivit... undvik skriva eget,men jag springer alltid motvind :P
Nä en av anledningar är att jag vill egentligen lära mig mer om att hantera moduler i drupal (likaså med att skapa egna - kommer säkert behöva det nån gång i framtiden).
Känner att jag måste börja nånstans och en flash modul är perfekt för det för i Joomla som jag är van vid (ej programmering i den) hade en kollega skrivit en modul för att publicera flash. upplägget i den är perfekt för mitt jobb :)
Så nu tjatar jag på att vi ska gå över till drupal ( här på jobbet) och vill därför ha mer kunskap. även liknande flash modul som vi hade i joomla.
Hmm. Istället för att köra
Hmm. Istället för att köra form alter på en node, så kan du köra en helt egen form istället. Du kör node = new node och sparar den själv, men du har inte ersatt ursprungs submitten utan lagt till ännu en, $form['#submit'] är en array med funktioner, och du appendar.
Ursprungs submitten kommer också skapa en nod.
Vad är $node->flash? Tar du hand om den själv vid hook_nodeapi op=save eller liknande? Annars sparas det inte.
Om det är ett cch fält så heter som normalt field_ före samt ska sättas som arrayer.
$form_state['flashmodul']['swf_files'] bör vara $form_state['values']['swf_files']
Om du vill bibehålla träd strukturen kan du sätta #tree =>true
Jo, det är ju mycket roligare att kryssa!
@Jonne_jvl är verkligen helt
@Jonne_jvl är verkligen helt ny på drupal och dess utveckling, och det underlättar inte att jag även är likaså på PHP (är mest hemma i ActipnScript3).
kan tyvärr inte svara på nån av frågorna med ett svar som förklarar nåt.
däremot $node->flash det var ett försök få ut denna SWF fil som var markerad i select i page-redigeringen. Trodde den datan skulle sparas tillsammans med allt annat (varför jag ville köra nodes egen form, om jag nu uttrycker mig rätt), men hittade ingenstans att den hade sparat något.
Mycket av php gör jag helt enkelt genom att jag kollar hur andra gjort, kopierar, och testar. Visst tar det 3 dagar att komma fråm till något som vanligtvis görs på nån timme av en erfaren PHP'are men nånstans måste man börja tugga.
vad är skillnaden mellan att köra alter på en node och att köra egen form ?
Det känns som du börjar i fel ända
Det känns som du börjar i fel ända. Den approach som din kod tar är också ganska fel, tyvärr ;) Gör såhär istället:
Lär dig koda helt egna moduler;)Detta skapar mycket stabilare och bättre sajter som är lättare att underhålla och uppgradera i framtiden. Detta är Drupals styrka. Lär dig utnyttja det!
Så jag föreslår att du tittar närmare på den lösning som letharion föreslog ovan: SWF-tools!
@Danel Som Dick säger så tror
@Danel
Som Dick säger så tror jag att du börjar i fel ände. Det i sig inget fel på vad du försöker göra, men det är väldigt ineffektivt. Du springer inte bara i motvind, du springer maraton åt fel håll, med tusentals galna drupal-utvecklare som alla kommer knuffa dig bakåt ;)
Med det sagt, så kan det fortfarande vara lärorikt att göra saker själv. Isåfall skulle jag säga att det du vill göra är att skapa en ny nod-typ. En länk som förhoppningsvis kan hjälpa dig i rätt riktning är: http://www.dynamiteheads.com/blog/jakub-suchy/how-create-content-types-c...
Thnx alla som svarat. Är
Thnx alla som svarat.
Är fullt medveten om att jag börjar i fel ände och springer maraton motsatt håll haha :)
jag var på g med SWF-tools och den funkade till o från. men känner ändå att jag måste kunna lite... iaf grundläggande för drupal utveckling.
så jag kommer nog inte vara nöjd med mig själv innan jag skapat en första modul ;)
ska definitivt kika på länkarna jag fått (om jag redan tidigare stött på dessa från google). Känns jag har en pussel framför mig och jag fattar inte logiken på hur man sätter ihop det... skitjobbigt.
tack för komplimangen... min kod ser för jävlig ut :D e väl mest för jag inte fattar hur man SKA göra
Vill ändå ställa några frågor som dokumentationen inte riktigt förklarar...
1) när jag är i page redigeringen... är det fel och köra modulnamn_form_alter() för att det som finns i funktionen ska ploppa upp på page-redigeringen (i form av fieldset) ? Vad använder man annars ?
2) Om jag har då en modulnamn_form_alter() func. och i den har jag form (se nedan)
<?php $form['flashmodul_node'] = array('#type' => 'fieldset',
'#title' => t('FlashModul'),
'#description' => t('Select SWF file to publish in this node.'),
'#collapsible' => true,
'#collapsed' => false
);
$form['flashmodul_node']['swf_files'] = array(
'#type' => 'select',
'#title' => t('Listing SWF files in folder "<em>root/'.$swfMediaFolder.'</em>"'),
'#default_value' => variable_get('flashmodul_node_swf',''),
'#options' => $fileArr,
'#multiple' => true
); ?>
är den då på något sätt kopplad till den formen som finns på redigerings-sidan (alltså den som håller i node->title, node->body och annat man stöter på när man redigerar / lägger till en sida).
3) om ovan kod INTE är kopplad, hur kopplar jag den ihop med den befintliga formen. Eller finns det något bättre sätt ? hur isf :)
4) sen följde jag några tuts, där det visades vad ska stå i .install filen för att lägga till DB, som inte verkade fungera, finns det några "common"-fel som brukar uppstå som kanske några av er känner till på rak arm.
Och tack på förhand till er som svarar!!!