The putContent
method on the $M2
object allows you to create new and update existing records for all
content types in your system.
The $contentType
parameter is equal to the one used
in the getContent
method - it is the id
attribute of the contentType
element in your XML
declaration of the type.
The $fields
parameter is what it's all about - this
is an array filling in all fields from the XML declaration. Suppose we
have a simple news type declared like this:
<?xml version="1.0" encoding="UTF-8"?> <contentType id="news"> <title lang="en" number="single">News</title> <title lang="en" number="plural">News</title> <title lang="da" number="single">Nyhed</title> <title lang="da" number="plural">Nyheder</title> <sorting direction="desc" fieldName="published" type="field" /> <fields> <field id="heading" linkField="1" multiLingual="1" type="text"> <title lang="da">Overskrift</title> <title lang="en">Heading</title> <rules> <required /> </rules> </field> <field id="published" multiLingual="0" type="date"> <title lang="da">Dato</title> <title lang="en">Date</title> </field> <field id="illustration" multiLingual="0" type="image"> <title lang="da">Billede</title> <title lang="en">Picture</title> </field> <field id="body" multiLingual="1" type="htmlarea"> <title lang="da">Brødtekst</title> <title lang="en">Body</title> <rules> <required /> </rules> </field> </fields> </contentType>
If you wish to create a record of this type via the
putContent
method, here's what is looks like:
<?php $fields = array( 'heading' => 'My Heading', 'published' => 1217566800, 'illustration' => array( 'name' => 'image.jpg', 'type' => 'image/jpeg', 'tmp_name' => '/path/to/imagetmpname.jpg' ), 'body' => "<p>Here's my body text.</p>' ); $options = array('action' => 'create'); M2_Content::put('news', $fields, $options); ?>
Creating a record in Moski2.net is simply a matter of providing
the values for all fields an a hash. Fields of type image
or file
are slightly different: these must contain an
array with the following keys:
Table 10. Keys for file based fields in putContent
Key | Description |
---|---|
name | The name of the original file. |
type | Mime type of the file. |
tmp_name | Path where the file is located on the server. |
The bright student will notice that these keys are similar to
the ones available from the PHP
$_FILES
variable after doing a file upload - the
intention is that you can pass on a file from $_FILES
directly to putContent
and not worry about mime
types or how to get the file from your upload and into Moski2.net. Of
course you are not restricted to this, but can supply the values
manually if your file does not stem from an upload.
The method will return TRUE upon success, or throw an error if anything goes
wrong. We try to honor any rules specified in your XML, but currently
only required
is checked, meaning that required fields
must be filled in for putContent
to succeed.
The $options
parameter is an array holding any
number of these keys.
Table 11. Keys for the options array
Key | Description | Default |
---|---|---|
lang | Language of the content you are creating. This is only relevant for sites running multiple languages and can be omitted for sites that are not running in multilingual mode. | The current language of the site. If in doubt, this can
be checked with
$M2->getCurrentLanguage() . |
uid | ID of the user who will be marked as creator of this content. | 0 or the ID of any user logged in when running the method. |
action | 'create' or 'update'. | 'create' |
nid | If | NULL |
A few things to keep in mind when "putting content" into Moski2.net:
Files can be no bigger than XXX MB
If dealing with a content type that has a parent type,
you can provide the ID of the parent node in the
'__parent__'
key in $fields
. If
omitted, the record will start its life as an orphan.