class BookExport in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/modules/book/src/BookExport.php \Drupal\book\BookExport
Provides methods for exporting book to different formats.
If you would like to add another format, swap this class in container.
Hierarchy
- class \Drupal\book\BookExport
Expanded class hierarchy of BookExport
1 file declares its use of BookExport
- BookController.php in core/
modules/ book/ src/ Controller/ BookController.php - Contains \Drupal\book\Controller\BookController.
1 string reference to 'BookExport'
- book.services.yml in core/
modules/ book/ book.services.yml - core/modules/book/book.services.yml
1 service uses BookExport
- book.export in core/
modules/ book/ book.services.yml - Drupal\book\BookExport
File
- core/
modules/ book/ src/ BookExport.php, line 18 - Contains \Drupal\book\BookExport.
Namespace
Drupal\bookView source
class BookExport {
/**
* The node storage.
*
* @var \Drupal\Core\Entity\EntityStorageInterface
*/
protected $nodeStorage;
/**
* The node view builder.
*
* @var \Drupal\Core\Entity\EntityViewBuilderInterface
*/
protected $viewBuilder;
/**
* The book manager.
*
* @var \Drupal\book\BookManagerInterface
*/
protected $bookManager;
/**
* Constructs a BookExport object.
*
* @param \Drupal\Core\Entity\EntityManagerInterface $entityManager
* The entity manager.
* @param \Drupal\book\BookManagerInterface $book_manager
* The book manager.
*/
public function __construct(EntityManagerInterface $entityManager, BookManagerInterface $book_manager) {
$this->nodeStorage = $entityManager
->getStorage('node');
$this->viewBuilder = $entityManager
->getViewBuilder('node');
$this->bookManager = $book_manager;
}
/**
* Generates HTML for export when invoked by book_export().
*
* The given node is embedded to its absolute depth in a top level section. For
* example, a child node with depth 2 in the hierarchy is contained in
* (otherwise empty) <div> elements corresponding to depth 0 and depth 1.
* This is intended to support WYSIWYG output - e.g., level 3 sections always
* look like level 3 sections, no matter their depth relative to the node
* selected to be exported as printer-friendly HTML.
*
* @param \Drupal\node\NodeInterface $node
* The node to export.
*
* @return array
* A render array representing the HTML for a node and its children in the
* book hierarchy.
*
* @throws \Exception
* Thrown when the node was not attached to a book.
*/
public function bookExportHtml(NodeInterface $node) {
if (!isset($node->book)) {
throw new \Exception();
}
$tree = $this->bookManager
->bookSubtreeData($node->book);
$contents = $this
->exportTraverse($tree, array(
$this,
'bookNodeExport',
));
return array(
'#theme' => 'book_export_html',
'#title' => $node
->label(),
'#contents' => $contents,
'#depth' => $node->book['depth'],
'#cache' => [
'tags' => $node
->getEntityType()
->getListCacheTags(),
],
);
}
/**
* Traverses the book tree to build printable or exportable output.
*
* During the traversal, the callback is applied to each node and is called
* recursively for each child of the node (in weight, title order).
*
* @param array $tree
* A subtree of the book menu hierarchy, rooted at the current page.
* @param callable $callable
* A callback to be called upon visiting a node in the tree.
*
* @return string
* The output generated in visiting each node.
*/
protected function exportTraverse(array $tree, $callable) {
// If there is no valid callable, use the default callback.
$callable = !empty($callable) ? $callable : array(
$this,
'bookNodeExport',
);
$build = array();
foreach ($tree as $data) {
// Note- access checking is already performed when building the tree.
if ($node = $this->nodeStorage
->load($data['link']['nid'])) {
$children = $data['below'] ? $this
->exportTraverse($data['below'], $callable) : '';
$build[] = call_user_func($callable, $node, $children);
}
}
return $build;
}
/**
* Generates printer-friendly HTML for a node.
*
* @param \Drupal\node\NodeInterface $node
* The node that will be output.
* @param string $children
* (optional) All the rendered child nodes within the current node. Defaults
* to an empty string.
*
* @return array
* A render array for the exported HTML of a given node.
*
* @see \Drupal\book\BookExport::exportTraverse()
*/
protected function bookNodeExport(NodeInterface $node, $children = '') {
$build = $this->viewBuilder
->view($node, 'print', NULL);
unset($build['#theme']);
return array(
'#theme' => 'book_node_export_html',
'#content' => $build,
'#node' => $node,
'#children' => $children,
);
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
BookExport:: |
protected | property | The book manager. | |
BookExport:: |
protected | property | The node storage. | |
BookExport:: |
protected | property | The node view builder. | |
BookExport:: |
public | function | Generates HTML for export when invoked by book_export(). | |
BookExport:: |
protected | function | Generates printer-friendly HTML for a node. | |
BookExport:: |
protected | function | Traverses the book tree to build printable or exportable output. | |
BookExport:: |
public | function | Constructs a BookExport object. |