Як програмно публікувати неопубліковані вузли


15

У мене є кілька неопублікованих вузлів, для яких я маю свої ідентифікатори вузлів. Як я можу їх програмно публікувати? Чи правильно цього досягти у спеціальному модулі, використовуючи такий запит?

db_query("UPDATE {node} SET status = 1 WHERE nid = %d", $nid)

Хоча це і не найчистіший, але один із швидших.
Оскар Кальво

3
Принципова проблема цього методу полягає в тому, що він не оновлюється node_revision, тому він спричинить непослідовність.
artfulrobot

Відповіді:


20

Використання db_query()- це метод Drupal 6, який не використовується в Drupal 7. Для досягнення вашої роботи я пропоную цей код (без будь-якого запиту вручну).

// load the node object
$node = node_load($nid);
// set status property to 1
$node->status = 1;
// re-save the node
node_save($node);

Якщо у вас є більше ідентифікатора вузла, і ви хочете опублікувати всі ці вузли, ви можете використовувати наступний код.

$nids = array();
// Load all nodes in one go for better performance.
$nodes = node_load_multiple($nids);
foreach ($nodes as $node) {
  // set status property to 1
  $node->status = 1;
  // re-save the node
  node_save($node);
}

3
Так? db_queryтакож метод Drupal 7. Просто бере різні аргументи.

@andrewtweber, Так, тепер це частина drupal, але подивіться першу версію drupal 7, а потім заявляйте !!!
Юсеф

Який гачок я повинен використовувати це? Я додав всередину kuk_node_submit, але я беру помилку. Кожна допомога?
сократіс

@sokratis в mock_form_alter додайте власний submitобробник у свій, а потім у користувальницький обробник подачі ви можете використовувати щось подібне.
Юзеф

Не забувайте цитати. $ node-> status = "1";
Selwyn Polit

7

коли ви використовуєте node_load (), node_load_multiple () для завантаження (декількох) noad (s), існує багато гачків, які викликаються модулями, такими як гак_node_load , гак_нод_операцій , гак_нод_препарат , гак_ноде_аксессе . Але виконуючи запит безпосередньо на друпальській схемі, ці гачки будуть ігноровані і призводять до багатьох проблем.

Запити:

db_query("UPDATE {node} SET `status` = '1' WHERE `nid` =:nid ;"
    ,array(':nid'=>$node->nid));

db_query("UPDATE {node_revision} SET `status` = '1' WHERE `nid` =:nid AND  `vid` =:vid;"
    ,array(':nid'=>$node->nid,'vid'=> $node->vid));

Просто скористайтеся вищевказаним кодом, якщо node_load () або node_load_multiple () не працює через нестачу вільної пам'яті.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.