2011-02-26 5 views
39

में प्रोग्रामेटिक रूप से नोड्स को छवि फ़ाइलों को संलग्न करना क्या प्रोग्राम को नोड में एक छवि जोड़ना संभव है?ड्रापल 7

उत्तर

50

यहाँ एक उदाहरण है जो आप node_save

$filepath = drupal_realpath('misc/druplicon.png'); 
    // Create managed File object and associate with Image field. 
    $file = (object) array(
    'uid' => 1, 
    'uri' => $filepath, 
    'filemime' => file_get_mimetype($filepath), 
    'status' => 1, 
); 

    // We save the file to the root of the files directory. 
    $file = file_copy($file, 'public://'); 

    $node->field_image[LANGUAGE_NONE][0] = (array)$file; 
` 
+4

+1। किसी भी कारण से, मुझे $ फ़ाइल सरणी में 'डिस्प्ले' => 1' भी जोड़ना पड़ा, अन्यथा मुझे एक बाधा उल्लंघन मिला कि field_doc_file_display पूर्ण था। यह एक छवि के बजाय एक फ़ाइल के लिए था, जो अंतर हो सकता है। – feedbackloop

+0

इस विधि को सफ़ेद करने के लिए Alt या शीर्षक जोड़ने का कोई तरीका है? – Shyghar

+2

LANGUAGE_NONE – saadlulu

0

हां, इसे सहेजते समय इसे $ नोड ऑब्जेक्ट का हिस्सा बनाएं। इसे node_save() का उपयोग करके सहेजें।

$filename = 'image.txt'; 
$image = file_get_contents('http://www.ibiblio.org/wm/paint/auth/gogh/gogh.white-house.jpg'); 
$file = file_save_data($image, 'public://' . $filename, FILE_EXISTS_RENAME); 
$node->field_image = array(LANGUAGE_NONE => array('0' => (array)$file)); 
30

एक आसान तरीका के साथ उपयोग कर सकते हैं का उपयोग कर कोड है इस जोड़ देती है नोड को छवि, और यदि आप छवि जोड़ रहे हैं तो आप ठीक हैं। हालांकि, अगर आप कर रहे हैं एक छवि को अद्यतन करने, और आप एक पृष्ठ पर प्रदर्शित करने के बारे में परवाह है, तो एक अतिरिक्त कदम() node_save कॉल करने से पहले की जरूरत है:

image_path_flush($node->field_image['und'][0]['uri']); 

यह उस छवि के शैलियों के सभी पुन: उत्पन्न होगी।

3

यहाँ एक अतिरिक्त बिट है कि मुझे ऊपर फिसल गया थोड़ी देर के लिए है::

6

यह वही मेरे लिए काम किया है:

$file_temp = file_get_contents('public://someimage.jpg'); 

// Saves a file to the specified destination and creates a database entry. 
$file_temp = file_save_data($file_temp, 'public://' . 'someimage.jpg', FILE_EXISTS_RENAME); 

$node->field_page_image = array(
    'und' => array(
    0 => array(
     'fid' => $file_temp->fid, 
     'filename' => $file_temp->filename, 
     'filemime' => $file_temp->filemime, 
     'uid' => 1, 
     'uri' => $file_temp->uri, 
     'status' => 1, 
     'display' => 1 
    ) 
) 
); 
+0

Drupal समुदाय दस्तावेज ऐसा करने के लिए थोड़ा अलग तरीका देता है। https://www.drupal.org/node/2301425। यह कहता है 'file_usage_add ($ फ़ाइल,' फ़ाइल ',' नोड ', $ नोड-> निड); यह करने के दौरान भी किया जाना चाहिए। – rineez

+1

यदि आप अब इसकी आवश्यकता नहीं है, तो आप अस्थायी फ़ाइल को मैन्युअल रूप से अनलिंक भी करना चाहेंगे। अन्यथा यह समय के साथ भंडारण स्थान का एक बड़ा अपशिष्ट बनने के लिए जमा हो जाएगा। – rineez

+0

इस मामले में कोई अस्थायी फ़ाइल नहीं है। छवि केवल स्मृति में डाउनलोड की जा रही है, फिर अपने लक्षित गंतव्य में संग्रहीत है। – Brian

2

$node->field_image[LANGUAGE_NONE][0] = (array)$file;

मैं एक बहुभाषी साइट के साथ इस की कोशिश की। यह काफी असफल रहा ... लेकिन बहुत ही मुश्किल है। मुझे प्रश्न में भाषा निर्दिष्ट करनी थी। सीधे शब्दों में कहें, यह बजाय काम किया:

$node->field_image['en'][0] = (array)$file;

इसके बिना, संलग्न फाइल 'दृश्य' स्क्रीन में देखा जा सकता था, लेकिन 'संपादन' स्क्रीन में नहीं।

0

यह मेरे लिए काम करता है:

define('DRUPAL_ROOT', $_SERVER['DOCUMENT_ROOT']); 
require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; 
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); 

$node = node_load(99); 
$filename = 'image.txt'; 
chdir(DRUPAL_ROOT); 
$image = file_get_contents('http://www.ibiblio.org/wm/paint/auth/gogh/gogh.white-house.jpg'); 
$file = file_save_data($image, 'public://' . $filename, FILE_EXISTS_RENAME); 
$node->field_imagen_producto = array(LANGUAGE_NONE => array('0' => (array)$file)); 
node_save($node); 
0

बस यहाँ भी मेरी समाधान पेस्ट करने के लिए जा रहा है, मैं एक नया नोड बनाते हैं, और प्रोग्राम के रूप में एक छवि अपलोड की जरूरत है।

$filepath = variable_get('file_public_path') . '/xmas_banner.jpg'; 
$file_temp = file_get_contents($filepath); 
$file_temp = file_save_data($file_temp, file_default_scheme() . '://' .'xmas_banner_nl.jpg', FILE_EXISTS_RENAME); 

$node = new stdClass(); 
$node->type = 'carousel'; // custom content type 
$node->title = 'XMAS NL'; 
$node->field_banner_image[LANGUAGE_NONE][0] = (array) $file_temp; 
$node->uid = 1; 
$node->status = 0; 
$node->active = 0; 
$node->promote = 0; 
node_save($node);