it-swarm.asia

كيفية إنشاء العقد باستخدام node_save؟

أحاول ترحيل موقع html الحالي إلى Drupal. لدي أكثر من 80000 صفحة يجب أن أهاجر لذا فكرت بدلاً من الجلوس أمام جهاز كمبيوتر لمدة 50 عامًا سأقوم بإنشاء وحدة نمطية. تمكنت من إنشاء برنامج نصي يستخرج HTML من كل دليل والآن وصلت إلى حاجز طريق حيث أحتاج إلى إنشاء عقدة. أحاول إنشاء عقدة جديدة باستخدام node_save() ، ولكن عند تنفيذ node_save ، أحصل على خطأ PDOException في كل ما أحاول. أنا أمرر $node ، وهي مصفوفة يتم صبها بعد ذلك في كائن.

PDOException: في field_sql_storage_field_storage_write () (السطر 424 من /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();
9
samwell

أعتقد أنه يجب عليك قراءة كيفية إنشاء العقد والتعليقات والتصنيفات برمجيًا في 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
6
penguin89

بدلاً من صب صفيف في كائن stdClass ، يمكنك محاولة إنشاء كائن stdClass() ثم استخدام node_object_prepare () لتحضير الكائن لإنشاء كائن جديد العقدة ثم تغيير قيم uid ، والاسم ، والعنوان ، واللغة ، والنص ، وما إلى ذلك يدويًا ، وتأكد أيضًا من استخدام node_submit () قبل حفظ العقدة الجديدة في قاعدة البيانات.

مثال: http://drupal.org/node/1173136

6
dwieeb

مشكلتك ، أنك تحاول إنشاء عقدة جديدة باستخدام nid = null و vid = null ، والتي تقوم بتدوير جدول العقدة بينما تحاول إدراج سجلات جديدة برقم الفهرس 0 - مما يؤدي إلى إنشاء مشكلة إدخالات مكررة و مربكة drupal core. بالمناسبة - drupal core عرضة لهذه الإجراءات لأن node_save لن يرى المشكلة ويحاول إدراج هذا السجل في قاعدة البيانات - مما يتسبب في حدوث خطأ SQL - ويتخلص من استثناء الشركة

1
Daniofantasy