1.2.1. M2_Content::get($contentType, [$options])

This is a key method in Moski2.net - you use it to retrieve content from the system and is probably what you will use the most.

$contentType is the id attribute of the root node (the contentType element) in your XML specification of a content type. Omitting the $options parameter you will retrieve all content nodes of the type you are asking for, sorted according to the sorting element of your XML specification.

What you get back is an array of content items. Each array is in turn another array, having the field names as keys and their content as values. For example, using M2_Content::get() to retrieve a set of content items from the example type in Section 4, “Defining Content Types” could return something like this (when piped through var_dump()):

array(7) {
  [0]=>
  array(10) {
    ["id"]=>
    string(4) "9369"
    ["created"]=>
    string(10) "1235936255"
    ["created_by"]=>
    string(1) "1"
    ["updated"]=>
    string(0) ""
    ["updated_by"]=>
    string(0) ""
    ["sort_value"]=>
    string(4) "9369"
    ["heading"]=>
    string(6) "Here's a heading for ya'"
    ["published"]=>
    string(10) "1236034801"
    ["illustration"]=>
    array(7) {
      ["id"]=>
      string(4) "1399"
      ["bytes"]=>
      string(3) "181"
      ["filename"]=>
      string(12) "glotextb.gif"
      ["mime"]=>
      string(9) "image/gif"
      ["visibility"]=>
      string(6) "PUBLIC"
      ["web_path"]=>
      string(33) "/files/bin/1399/orig/glotextb.gif"
    }
    ["body"]=>
    string(8) "<p>spweee</p>"
  }
  [1]=>
  array(10) {
    ["id"]=>
    string(4) "9370"
    ["created"]=>
    string(10) "1235936270"
    ["created_by"]=>
    string(1) "1"
    ["updated"]=>
    string(0) ""
    ["updated_by"]=>
    string(0) ""
    ["sort_value"]=>
    string(4) "9370"
    ["heading"]=>
    string(6) "Head Me!"
    ["published"]=>
    string(10) "1233442801"
    ["illustration"]=>
    array(0) {
    }
    ["body"]=>
    string(10) "<p>sdf</p>"
  }
  [2]=>
  array(10) {
    ["id"]=>
    string(5) "10995"
    ["created"]=>
    string(10) "1244208471"
    ["created_by"]=>
    string(1) "1"
    ["updated"]=>
    string(0) ""
    ["updated_by"]=>
    string(0) ""
    ["sort_value"]=>
    string(5) "10995"
    ["heading"]=>
    string(12) "My third heading"
    ["published"]=>
    string(10) "1213308001"
    ["illustration"]=>
    array(0) {
    }
    ["body"]=>
    string(0) "<p>Not much here.</p>"
  }
}

Content items are returned in the way they appear in the administration, unless you specify the orderBy parameter as described below.

A number of the fields are internal Moski2.net fields that you may or may not find useful

Following these fields are the ones defined by you in the XML specification for the type.

As you can tell from the illustration field above, file based fields, like file and image will contain an array of information, instead of a string:

Table 7. Associative array returned for binary fields

KeyDescription
id

ID number of the binary. This is used internally by Moski2.net and has no meaning to you.

bytes

File size in bytes.

filename

Original filename of the uploaded file.

mime

Mime type of the file, as detected when uploaded.

visibility

PUBLIC or SECURE. If SECURE, web_path will be empty and you must use M2_Content::streamBinary() to stream out the file.

web_path

Path to the file on your web site - this can be used to create a link directly to the file.

Note

You can not access the file via file system functions, as it is really proxied from the administrative pages of your site. If you need to do things with the file, like scaling it if it is an image, see the filter parameter below instead.


This is also true for the special filemanager field type, except that it has no visibility key, as there is no way to determine visibility for files uploaded through the file manager.

1.2.1.1. Controlling the query

Following is a list of keys that you can send along with the $options array to M2_Content::get($options) in order to modify the result set.

whereAdd

The whereAdd parameter lets you specify something similar to a where clause in SQL. There Moski2.net where clause is described as an array of arrays, each holding a single condition.

Here's an example that retrieves all records for a type, where the date field is before August 1. 2008 (converted to a unix timestamp), and the id field is not 1, 2 or 3.:

<?php

$conditionA = array('fieldName' => 'date', 'operator' => '<', 'value' => 1217566800);
$conditionB = array('fieldName' => 'id', 'operator' => 'notin', 'value' => array(1,2,3);

$options = array('whereAdd' => array($conditionA, $conditionB));

$data = M2_Content::get('mytype', $options);

?>

Important

You can specify as many conditions as you like, but only content that satisfies all conditions will be returned. In other words, the conditions are ANDed and not ORed.

Below is a list of available operators when creating where clauses for a getContent query.

Table 8. Values for the operator field in where clauses

OperatorExplanation
<Less than
<=Less than or equal to
=Equal to
>=Greater than or equal to
>Greater than
!=Not equal to
in

When supplying an array to the value field and using this operator you will only get the results back where fieldName equals one of the values in the array.

This mimics the IN keyword from standard SQL.

notin

This operator works in the opposite way of the in operator - supply an array of values that fieldName can NOT be equal to.

like

This operator matches records where fieldName contains the string in the value field - you are in fact performing a basic search.

This mimics the LIKE keyword from standard SQL, utilizing wildcard matching.


Important

There is a limitation on multidimensional fields (checkbox and text variants of the link type):

The text variant can currently not be queried with whereAdd at all, and checkbox variants can be queried with the operators '=', '!=' and 'in'.

orderBy

This is an implementation of the standard SQL order by expression - you simply supply the field name that the results should be sorted by, and then supply an orderDirection key to specify whether to sort ascending or descending.

If omitted, the results will be returned as they appear in the administration (that is, as defined in the type definition).

orderDirection

Goes hand in hand with the orderBy key - see explanation above.

Can be one of asc or desc.

limit

Use this to limit the number of records you want to retrieve.

This is similar to the standard LIMIT keyword from standard SQL.

offset

Use this to start retrieval with an offset - similar to the standard OFFSET SQL keyword.

idsAsKeys

By default results are returned in a flat array containing a hash for each entry. If you set idsAsKeys to 1, you will get back a hash with the node IDs as keys instead.

Important

This effectively disables any sorting, as the result array is sorted by key.

cache

Set to 1 for retrieving cached results and 0 to perform a fresh query against the Moski2Engine. Disabling the cache is only relevant if you suspect that the cache is corrupt, as the cache is automatically maintained.

filter

Moski2.net has a number of built-in filters that you can pipe content through before retrieving it. The filter parameter is an array with field names as keys and an array of filters to apply as keys. These keys are also arrays, using the filter name as keys, and their arguments as values. Confused? Check out this example:

<?php

$filter = array(                                                                                                        
  'myfilefield' => array(                                                                                    
     'ImageTag' => array(                                                                
        'width' => 600,                                                 
        'height' => 400,
        'attributes' => array(    
           'title' => 'mytitle',
           'alt' => 'myalt'
         )                                            
      )                                                               
  )                                                                                   
);                                                                                                      
                                       
$opts = array('binariesV2' => 1, 'filter' => $filter);                                                                                 
$data = M2_Content::get('mytype', $opts);

?>

This example pipes all myfilefield values through the ImageTag filter with width, height and attributes arguments. This means that the data returned by M2_Content::get() now has ready-to-use <img> elements in all the myfilefield slots, instead of just an array of information about the file.

An example <img> element could look like this:

<img src="/files/bin/6428/600/400/abm6.png" style="width:596px;height:400" />

You can apply as many filters to as many fields as you like. However, we currently only have one filter, and you would only want to apply it to image fields:

Table 9. Available filters

Filter nameDescriptionArguments
ImageTagTurns an image field into an HTML img element. When requested by a client afterwards, the image will automatically be scaled if it doesn't fit within the maximum dimensions of the element.
width

Maximum width of the image in pixels.

height

Maximum height of the image in pixels.

attributes

An optional array of attributes to add to the img element. Typical candidates are keys like title, alt, class and id.

You can use the value from one of the content fields automatically by prefixing with the field name. So if you have a type with a "title" field and you want to use that as your alt attribute, you can provide an attributes array like this:

<?php

$filter = array(                                                                                                        
  'myfilefield' => array(                                                                                    
     'ImageTag' => array(                                                                
        'width' => 600,                                                 
        'height' => 400,
        'attributes' => array(    
           'alt' => 'field:title'
         )                                            
      )                                                               
  )                                                                                   
);                                                                                                      
                                       
$opts = array('filter' => $filter);                                                                                 
$data = M2_Content::get('mytype', $opts);

?>

Note

If you provide a style key here, it will temporarily be overwritten - this will be fixed.

ImageUseAltAsCaptionExtracts the ALT attribute from an image and presents it beneath the image.
selector

An optional parameter to determine that only images with a certain class should be filtered. If omitted all images are filtered.

method

Method of presentation - currently only 'div' is supported which turns

wrapperClass

Example:

<?php

$filter = array(                                                                                                        
  'myimagefield' => array(                                                                                    
     'ImageUseAltAsCaption' => array(                                                                
        'selector' => 'myclass',
        'method' => 'div',
        'wrapperClass' => 'mywrapper'                                
      )                                                               
  )                                                                                   
);                                                                                                      
                                       
$opts = array('filter' => $filter);                                                                                 
$data = M2_Content::get('mytype', $opts);

?>

The result of applying this filter to a string like this:

<img class="myclass" src="/path/to/img.png" alt="Me love alt" />

Will be something like this:

<div class="mywrapper">
  <div class="image">
    <img class="myclass" src="/path/to/img.png" alt="Me love alt" />
  </div>
  <div class="caption">Me love alt</div>
</div>
ObfuscateEmailObfuscates email addresses to prevent spammer harvesting of your emails.
method

Currently two different types of obfuscation is available and you determine which one to use with this argument.

  • rtl: Reverses the email address and wraps it in a <span> tag that will have the browser swap it back. Despite the simple approach this has proved extremely effective.

  • entities: Turns selected characters of the address into entities.

Example:

<?php

$filter = array(                                                                                                        
  'myfield' => array(                                                                                    
     'ObfuscateEmail' => array(                                                                
        'method' => 'rtl'                                          
      )                                                               
  )                                                                                   
);                                                                                                      
                                       
$opts = array('filter' => $filter);                                                                                 
$data = M2_Content::get('mytype', $opts);

?>

If you just send an empty array along as argument Moski2.net will pick an obfuscation method for you.


Ideas for future filters include automatic URL2link generation and custom filter possibilities.