Pagefiles

A Pagefiles object is a WireArray collection of Pagefile objects

It is the value type for multi-file fields in ProcessWire (created by FieldtypeFile) and provides methods for adding, removing, renaming, duplicating, and finding files by tag or basename.

// $page->files is a Pagefiles instance
foreach($page->files as $name => $file) {
    echo "<li><a href=\'$file->url\'>$name</a> — $file->description</li>";
}

Expand all      API reference

Properties
PropertyTypeDescription
pathstringFull server disk path to the directory that stores the files.
urlstringWeb-accessible URL to the directory that stores the files.
pagePageThe Page object that owns this file collection.
fieldFieldThe Field object that defines this file collection.
Retrieval

Pagefiles extends WireArray, so all traversal, filtering, slicing, sorting, and counting methods from WireArray are available. The methods below are specific to file collections.

getFile($name)

Get a Pagefile by its basename. Returns null if not found. Array access with the basename is equivalent.

$file = $page->files->getFile('document.pdf');
$file = $page->files['document.pdf']; // equivalent

findTag($tag)

Return a new Pagefiles collection containing only files that match the given tag expression.

// Single tag
$downloads = $page->files->findTag('download');

// OR: files with any of these tags
$featured = $page->files->findTag('featured|hero|gallery');

// AND: files with all of these tags
$hero = $page->files->findTag('featured,hero');

getTag($tag)

Return the first Pagefile matching the given tag expression, or null if none match. Accepts the same tag syntax as findTag().

$hero = $page->files->getTag('hero');

tags($value)

When called without arguments, returns all tags used by files in this collection as a space-separated string. Pass true to receive an associative array. Pass a tag string to retrieve files matching those tags (alias of findTag()).

$allTags = $page->files->tags();       // "download featured pdf"
$tagsArray = $page->files->tags(true); // ['download' => 'download', ...]

$downloads = $page->files->tags('download');
Manipulation

Destructive changes are queued until the owning page is saved. Call $page->save('field_name') to persist additions, deletions, renames, and duplications.

add($item)

Add a new file to the collection. Accepts a local path, an HTTP(S) URL, or an existing Pagefile object. The file is copied into the page's files directory and given a sanitized, unique basename.

$page->files->add('/path/to/document.pdf');
$page->files->add('https://example.com/image.png');
$page->save('files');

When adding a Pagefile that belongs to a different page, the file is copied into the current page's files directory and marked as temporary until saved.

delete($item)

Queue a Pagefile (or its basename) for deletion. The file is removed from the collection immediately and deleted from disk when the page is saved.

$page->files->delete('old-document.pdf');
$page->save('files');

deleteAll()

Queue every file in the collection for deletion.

$page->files->deleteAll();
$page->save('files');

rename($item, $name)

Queue a rename of a Pagefile. The actual rename occurs when the page is saved.

$file = $page->files->getFile('document.pdf');
$page->files->rename($file, 'report.pdf');
$page->save('files');

clone($item, $options)

Duplicate a Pagefile and insert it into the collection. Returns the new Pagefile or false on failure. The duplicated file is temporary until the page is saved.

$file = $page->files->getFile('document.pdf');
$copy = $page->files->clone($file);
$copy->description = 'Copy of document.pdf';
$page->save('files');

Available options:

OptionTypeDefaultDescription
actionstring'after'Where to insert: 'append', 'prepend', 'after', 'before', or blank to return without inserting.
pagefilesPagefiles$thisTarget Pagefiles instance for the duplicate.
Paths

path()

Return the full disk path where the files are stored.

$path = $page->files->path();

url()

Return the web-accessible URL where the files are stored.

$url = $page->files->url();
File metadata

cleanBasename($basename, $originalize = false, $allowDots = true, $translate = false)

Sanitize a filename for use in this collection. Usually called internally when files are added, but available for custom file handling.

$safe = $page->files->cleanBasename('My File.PDF', true);

getFiles()

Return a flat array of disk paths for every file in the collection, including any extra files managed by PagefileExtra.

$paths = $page->files->getFiles();
Hooks

Pagefiles provides two hookable mutation methods:

HookWhenArguments
Pagefiles::deleteBefore a file is queued for deletionPagefile $file
Pagefiles::cloneBefore a file is duplicatedPagefile $item, array $options
$wire->addHookBefore('Pagefiles::delete', function(HookEvent $event) {
    $pagefiles = $event->object; // Pagefiles
    $file = $event->arguments(0); // Pagefile
    // log deletion, check permissions, etc.
});

Individual file URLs and filenames can be hooked on the Pagefile class. See Pagefile for details.

Notes
  • Pagefiles extends WireArray, so all filtering, sorting, iteration, and array-access features from WireArray are available.
  • Items are keyed by basename, so $page->files['report.pdf'] works.
  • Files are not actually deleted, renamed, or committed until the owning page is saved.
  • Adding a Pagefile that belongs to another page copies the file into the current page's files directory.
  • For single-file fields, FieldtypeFile may return a Pagefile object directly when output formatting is on.
  • Source file: wire/core/Pagefiles/Pagefiles.php

API reference: methods, properties, hooks

Pagefile objects are contained by a Pagefiles object.


Click any linked item for full usage details and examples. Hookable methods are indicated with the icon. In addition to those shown below, the Pagefile class also inherits all the methods and properties of: WireData and Wire.

Show class?     Show args?       Only hookable?    

Common

NameReturnSummary 
Pagefile::__construct(Pagefiles $pagefiles, string $filename)
None

Construct a new Pagefile

 
Pagefile::basename()
string

Returns the basename of this Pagefile (name and extension, without disk path).


Can also be used as property: Pagefile::basename
 
Pagefile::description()
string array

Get or set the file’s description (with multi-language support).


Can also be used as property: Pagefile::description
 
Pagefile::ext()
string

Returns the file’s extension - "pdf", "jpg", etc.


Can also be used as property: Pagefile::ext
 
Pagefile::filemtime()
int

Get last modified time of file

 
Pagefile::filesize()
int

Returns the filesize in number of bytes.


Can also be used as property: Pagefile::filesize
 
Pagefile::filesizeStr()
string

Returns the filesize in a formatted, output-ready string (i.e. "123 kB")


Can also be used as property: Pagefile::filesizeStr
 
Pagefile::getFiles()
array

Get all filenames associated with this file

 
Pagefile::hash()
string

Return a unique MD5 hash representing this Pagefile.


Can also be used as property: Pagefile::hash
 
Pagefile::hidden()
None

Get or set hidden state of this file

 
Pagefile::httpUrl()
string

Return the web accessible URL (with scheme and hostname) to this Pagefile.


Can also be used as property: Pagefile::httpUrl
Pagefile::isNew()
bool

Get or set “new” status of the Pagefile

 
Pagefile::noCacheURL()
string
Pagefile::save()
bool

Save this Pagefile independently of the Page it lives on

 
Pagefile::uploadName()
string

Original and unsanitized filename at the time it was uploaded


Can also be used as property: Pagefile::uploadName
 

Traversal

For the most part you’ll want to traverse from the parent Pagefiles object than these methods.

NameReturnSummary 
Pagefile::getNext()
Pagefile null

Return the next sibling Pagefile in the parent Pagefiles, or NULL if at the end.

 
Pagefile::getPrev()
Pagefile null

Return the previous sibling Pagefile in the parent Pagefiles, or NULL if at the beginning.

 

Manipulation

Remember to follow up any manipulations with a $pages->save() call.

NameReturnSummary 
Pagefile::addTag($tag)
$this

Add the given tag to this file’s tags (if not already present)

 
Pagefile::description()
string array

Get or set the file’s description (with multi-language support).


Can also be used as property: Pagefile::description
 
Pagefile::filedata()
mixed

Get or set filedata


Can also be used as property: Pagefile::filedata
 
Pagefile::removeTag(string $tag)
$this

Remove the given tag from this file’s tags (if present)

 
Pagefile::rename(string $basename)
string bool

Rename this file

 
Pagefile::tags()
string array

Get or set the "tags" property, when in use.


Can also be used as property: Pagefile::tags
 

Date time

NameReturnSummary 
Pagefile::created int Unix timestamp of when file was created.  
Pagefile::createdStr string Readable date/time string of when Pagefile was created  
Pagefile::modified int Unix timestamp of when Pagefile (file, description or tags) was last modified.  
Pagefile::modifiedStr string Readable date/time string of when Pagefile was last modified.  
Pagefile::mtime int Unix timestamp of when file (only) was last modified.  
Pagefile::mtimeStr string Readable date/time string when file (only) was last modified.  

For hooks

These methods are only useful for hooking and should not be called directly.

Tags

Be sure to see the Pagefiles::getTag() and Pagesfiles::findTag() methods, which enable you retrieve files by tag.

NameReturnSummary 
Pagefile::addTag($tag)
$this

Add the given tag to this file’s tags (if not already present)

 
Pagefile::hasTag($tag)
bool string

Does this file have the given tag(s)?

 
Pagefile::removeTag(string $tag)
$this

Remove the given tag from this file’s tags (if present)

 
Pagefile::tags()
string array

Get or set the "tags" property, when in use.


Can also be used as property: Pagefile::tags
 
Pagefile::tagsArray array Get file tags as an array.  

Other

NameReturnSummary 
Pagefile::HTTPURL string Same as the cache-busting uppercase “URL” property, but includes scheme and hostname.  
Pagefile::URL string Same as $url property but with browser cache busting query string appended.  
Pagefile::createdUser User NullPage User that added/uploaded the file or NullPage if not known 3.0.154+.  
Pagefile::created_users_id int ID of user that added/uploaded the file or 0 if not known 3.0.154+.  
Pagefile::field Field The Field object that this file is part of.  
Pagefile::modifiedUser User NullPage User that last modified the file or NullPage if not known 3.0.154+.  
Pagefile::modified_users_id int ID of user that last modified the file or 0 if not known 3.0.154+.  
Pagefile::page Page The Page object that this file is part of.  
Pagefile::pagefiles Pagefiles The Pagefiles WireArray that contains this file.  

Properties

NameReturnSummary 
Pagefile::name string Returns the filename without the path, same as the "basename" property. 

Additional methods and properties

In addition to the methods and properties above, Pagefile also inherits the methods and properties of these classes:

API reference based on ProcessWire core version 3.0.269