Clone entire page return it.
This also clones any file assets assets associated with the page. The clone is recursive
by default, cloning children (and so on) as well. To clone only the page without children,
specify false for the $recursive
argument.
Warning: this method can fail when recursive and cloning a page with huge amounts of children (or descendent family), and adequate resources (like memory or time limit) are not available.
Example
// Clone the Westin Peachtree skyscraper page
$building = $pages->get('/skyscrapers/atlanta/westin-peachtree/');
$copy = $pages->clone($building);
// Bonus: Now that the clone exists, lets move and rename it
$copy->parent = '/skyscrapers/detroit/';
$copy->title = 'Renaissance Center';
$copy->name = 'renaissance-center';
$copy->save();
Usage
// basic usage
$page = $pages->clone(Page $page);
// usage with all arguments
$page = $pages->clone(Page $page, $parent = null, bool $recursive = true, $options = []);
Arguments
Name | Type(s) | Description |
---|---|---|
page | Page | Page that you want to clone |
parent (optional) | Page, null | New parent, if different (default=null, which implies same parent) |
recursive (optional) | bool | Clone the children too? (default=true) |
options (optional) | array, string | Options that can be passed to modify default behavior of clone or save:
|
Return value
Exceptions
Method can throw exceptions on error:
WireException
or\Exception
- on fatal error
Hooking $pages->clone(…)
You can add your own hook events that are executed either before or after the $pages
method is executed. Examples of both are included below. A good place for hook code such as this is in your /site/ready.php file.
Hooking before
The 'before' hooks are called immediately before each $pages
method call is executed. This type of hook is especially useful for modifying arguments before they are sent to the method.
$this->addHookBefore('Pages::clone', function(HookEvent $event) {
// Get the object the event occurred on, if needed
$pages = $event->object;
// Get values of arguments sent to hook (and optionally modify them)
$page = $event->arguments(0);
$parent = $event->arguments(1);
$recursive = $event->arguments(2);
$options = $event->arguments(3);
/* Your code here, perhaps modifying arguments */
// Populate back arguments (if you have modified them)
$event->arguments(0, $page);
$event->arguments(1, $parent);
$event->arguments(2, $recursive);
$event->arguments(3, $options);
});
Hooking after
The 'after' hooks are called immediately after each $pages
method call is executed. This type of hook is especially useful for modifying the value that was returned by the method call.
$this->addHookAfter('Pages::clone', function(HookEvent $event) {
// Get the object the event occurred on, if needed
$pages = $event->object;
// An 'after' hook can retrieve and/or modify the return value
$return = $event->return;
// Get values of arguments sent to hook (if needed)
$page = $event->arguments(0);
$parent = $event->arguments(1);
$recursive = $event->arguments(2);
$options = $event->arguments(3);
/* Your code here, perhaps modifying the return value */
// Populate back return value, if you have modified it
$event->return = $return;
});
API reference based on ProcessWire core version 3.0.236