Created
May 30, 2015 00:33
-
-
Save dsnopek/20dd0fec4fbc4a4e6ca8 to your computer and use it in GitHub Desktop.
Panopoly: Convert Page Manager pages into Landing Page nodes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function _panopoly_convert_landing_pages() { | |
ctools_include('export'); | |
// Collect a list of all the page manager pages that are eligable for | |
// conversion. There are lots of features of page manager pages that don't | |
// work with Panelizer nodes! | |
$pages = array(); | |
foreach (ctools_export_load_object("page_manager_pages") as $page) { | |
// Skip pages that are in code at all (even if they are overridden in the | |
// database). | |
if ($page->export_type & EXPORT_IN_CODE) { | |
continue; | |
} | |
// Skip pages that have access rules. | |
if (!empty($page->access)) { | |
continue; | |
} | |
// Skip pages that have menus that aren't 'Normal menu entry'. | |
if (!empty($page->menu) && $page->menu['type'] != 'none' && $page->menu['type'] != 'normal') { | |
continue; | |
} | |
// Load the page variants. | |
$handlers = page_manager_load_task_handlers(page_manager_get_task('page'), $page->name); | |
// Skip pages that have more than one variant. | |
if (count($handlers) != 1) { | |
continue; | |
} | |
// Get the only variant. | |
$handler = reset($handlers); | |
// Skip variants that aren't Panels displays. | |
if ($handler->handler != 'panel_context') { | |
continue; | |
} | |
// Skip pages where the variant has selection rules or is in code. | |
if (($handler->export_type & EXPORT_IN_CODE) || !empty($handler->conf['access']['plugins'])) { | |
continue; | |
} | |
// Load the Panels display. | |
$display = panels_load_display($handler->conf['did']); | |
// Before creating the node, we need to disable the Page Manager page so | |
// that the URL is available for the alias. | |
ctools_export_set_object_status($page, 0); | |
$pages[] = array( | |
'page' => $page, | |
'handler' => $handler, | |
'display' => $display, | |
); | |
} | |
// Rebuild the menu now that we've disabled all the page manager pages. | |
menu_rebuild(); | |
// Now, actually create the new nodes and remove the page manager pages. | |
foreach ($pages as $data) { | |
$page = $data['page']; | |
$handler = $data['handler']; | |
$display = $data['display']; | |
//print_r($page); | |
//print_r($handler); | |
//print_r($display); | |
// Create a new 'Landing page' node. | |
$node = entity_create('node', array('type' => 'panopoly_landing_page')); | |
$node->title = $display->title; | |
$node->path = array( | |
'pathauto' => FALSE, | |
'alias' => $page->path, | |
); | |
$node->uid = 1; | |
if ($page->menu['type'] == 'normal') { | |
$node->menu = array( | |
'enabled' => TRUE, | |
'link_title' => $page->menu['title'], | |
'menu_name' => $page->menu['name'], | |
); | |
} | |
//print_r($node); | |
entity_save('node', $node); | |
// Create an entry on 'panelizer_entity' which will point to the same | |
// Panels display. | |
$panelizer = (object)array( | |
'entity_type' => 'node', | |
'entity_id' => $node->nid, | |
'revision_id' => $node->vid, | |
'name' => 'node:panopoly_landing_page:default', | |
'view_mode' => 'page_manager', | |
// Point to the same Panels display. | |
'did' => $display->did, | |
// Copy configuration. | |
'css_id' => $handler->conf['css_id'], | |
'css_class' => $handler->conf['body_classes_to_add'], | |
'css' => $handler->conf['css'], | |
'pipeline' => $handler->conf['pipeline'], | |
'contexts' => $handler->conf['contexts'], | |
'relationships' => $handler->conf['relationships'], | |
// Even if this wasn't true on the Page Manager page, we want this value | |
// to make newly created Landing Pages. | |
'no_blocks' => 1, | |
// Some other defaults. | |
'title_element' => 'H2', | |
'link_to_entity' => 1, | |
'extra' => array(), | |
); | |
drupal_write_record('panelizer_entity', $panelizer); | |
// Finally, we can remove the Page Manager page and handler. | |
db_delete('page_manager_pages') | |
->condition('pid', $page->pid) | |
->execute(); | |
db_delete('page_manager_handlers') | |
->condition('did', $handler->did) | |
->execute(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment