नोड_सेवे का उपयोग करके नोड्स कैसे बनाएं?


9

मैं अपने वर्तमान html साइट को Drupal में स्थानांतरित करने का प्रयास कर रहा हूं। मेरे पास 80,000 से अधिक पृष्ठ हैं, इसलिए मुझे प्रवास करना है इसलिए मैंने सोचा कि 50 वर्षों तक कंप्यूटर के सामने बैठने के बजाय मैं एक मॉड्यूल बनाऊंगा। मैं एक स्क्रिप्ट बनाने में सक्षम था जो प्रत्येक निर्देशिका से HTML निकालता है और अब मुझे एक सड़क ब्लॉक मिला जहां मुझे नोड बनाने की आवश्यकता है। मैं उपयोग करके एक नया नोड बनाने की कोशिश कर रहा हूं node_save(), लेकिन जब नोड_सैव निष्पादित किया जाता है, तो मुझे PDOExceptionमेरे द्वारा कोशिश की जाने वाली हर चीज के साथ एक त्रुटि मिलती है । मैं अंदर जा रहा हूं $node, जो एक सरणी है जिसे तब किसी ऑब्जेक्ट में डाला जाता है।

PDOException: field_sql_storage_field_storage_write () (पंक्ति 424 of/srv/www/htdocs/modules/field/modules/field_sql_storage/field_sql_storage.module) में।

यह वर्तमान में हम नोड बना रहे हैं, लेकिन यह एक त्रुटि पैदा करता है:

$node= array(
    'uid' => $user->uid,
    'name' => $user->name,
    'type' => 'page',
    'language' => LANGUAGE_NONE,
    'title' => $html['title'],
    'status' => 1,
    'promote' => 0,
    'sticky' => 0,
    'created' => (int)REQUEST_TIME,
    'revision' => 0,
    'comment' => '1',
    'menu' => array(
        'enabled' => 0,
        'mlid' => 0,
        'module' => 'menu',
        'hidden' => 0,
        'has_children' => 0,
        'customized' => 0,
        'options' => array(),
        'expanded' => 0,
        'parent_depth_limit' => 8,
        'link_title' => '',
        'description' => '',
        'parent' => 'main-menu:0',
        'weight' => '0',
        'plid' => '0',
        'menu_name' => 'main-menu',
    ),
    'path' => array(
        'alias' => '',
        'pid' => null,
        'source' => null,
        'language' => LANGUAGE_NONE,
        'pathauto' => 1,
    ),
    'nid' => null,
    'vid' => null,
    'changed' => '',
    'additional_settings__active_tab' => 'edit-menu',
    'log' => '',
    'date' => '',
    'submit' => 'Save',
    'preview' => 'Preview',
    'private' => 0,
    'op' => 'Save',
    'body' => array(LANGUAGE_NONE => array(
        array(
            'value' => $html['html'],
            'summary' => $link,
            'format' => 'full_html',
        ),
    )),
        'validated' => true,
);

node_save((object)$node);

// Small hack to link revisions to our test user.
db_update('node_revision')
    ->fields(array('uid' => $node->uid))
    ->condition('vid', $node->vid)
    ->execute();

जवाबों:


6

मुझे लगता है कि आपको Drupal 7 में प्रोग्राम, नोड्स, कमेंट्स और टैक्सोनॉमी बनाने का तरीका पढ़ना चाहिए ।

$node = new stdClass(); // We create a new node object
$node->type = "page"; // Or any other content type you want
$node->title = "Your title goes jere";
$node->language = LANGUAGE_NONE; // Or any language code if Locale module is enabled. More on this below *
$node->path = array('alias' => 'your node path'); // Setting a node path
node_object_prepare($node); // Set some default values.
$node->uid = 1; // Or any id you wish

// Let's add standard body field
$node->body[$node->language][0]['value'] = 'This is a body text';
$node->body[$node->language][0]['summary'] = 'Here goes a summary';
$node->body[$node->language][0]['format'] = 'filtered_html'; // If field has a format, you need to define it. Here we define a default filtered_html format for a body field

$node = node_submit($node); // Prepare node for a submit
node_save($node); // After this call we'll get a nid

डाउनवोट क्यों?
vfclists

6

किसी stdClassऑब्जेक्ट में एक सरणी डालने के बजाय , आप एक नया stdClass()ऑब्जेक्ट बनाने के लिए और फिर एक नया नोड बनाने के लिए ऑब्जेक्ट तैयार करने के लिए node_object_prepare () का उपयोग करके प्रयास कर सकते हैं और फिर मैन्युअल रूप से यूआईडी, नाम, शीर्षक, भाषा, शरीर, आदि के मूल्यों को बदल सकते हैं। इसके अलावा, डेटाबेस में नए नोड को बचाने से पहले नोड_सुमिट () का उपयोग करना सुनिश्चित करें।

उदाहरण: http://drupal.org/node/1173136


1

आपकी समस्या यह है, कि आप nid = null और vid = null के साथ एक नया नोड बनाने की कोशिश कर रहे हैं, जो नोड टेबल को खराब कर रहा है क्योंकि आप इंडेक्स नंबर 0 के साथ नए रिकॉर्ड डालने की कोशिश कर रहे हैं - जो एक डुप्लिकेट प्रविष्टियों की समस्या पैदा कर रहा है और ड्रुपल कोर को भ्रमित करना। वैसे - ड्रूपल कोर इस तरह के कार्यों के लिए असुरक्षित है क्योंकि नोड_वे समस्या को नहीं देखेंगे और उस रिकॉर्ड को डीबी में डालने की कोशिश करेंगे - जो कि एक sql त्रुटि पैदा कर रहा है - और PDO अपवाद को बाहर करना

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.