Ordering attributes within a node: Difference between revisions
→Ordering attributes within a node: added what to do to change order dynamically |
|||
| Line 5: | Line 5: | ||
If you have an <tt>atkNode</tt>, attributes (i.e. database columns) appear in the order in which they are added via <tt>atkNode::add()</tt>. | If you have an <tt>atkNode</tt>, attributes (i.e. database columns) appear in the order in which they are added via <tt>atkNode::add()</tt>. | ||
If you have an <tt>atkMetaNode</tt> (or derived class), fields appear in the order in which they appear in the database. To control the order in which attributes appear within a node (i.e. on a "page"), use <tt>atkMetaPolicy::setOrder()</tt>, <tt>atkMetaPolicy::setIncludes()</tt> or the <tt>$order</tt> argument to either <tt>atkMetaNode::add()</tt> or <tt>atkMetaPolicy::add()</tt>. | If you have an <tt>atkMetaNode</tt> (or derived class), fields appear in the order in which they appear in the database. To control the order in which attributes appear within a node (i.e. on a "page"), use <tt>atkMetaPolicy::setOrder()</tt>, <tt>atkMetaPolicy::setIncludes()</tt> or the <tt>$order</tt> argument to either <tt>atkMetaNode::add()</tt> or <tt>atkMetaPolicy::add()</tt>. If you don't have access to an <tt>atkMetaPolicy</tt>, use <tt>atkMetaNode::setAttributeOrder()</tt>. | ||
===Examples=== | |||
With <tt>atkMetaPolicy</tt>: | |||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
| Line 18: | Line 20: | ||
"invoice_end_date" | "invoice_end_date" | ||
)); | )); | ||
} | |||
</syntaxhighlight> | |||
With <tt>atkMetaNode</tt>: | |||
<syntaxhighlight lang="php"> | |||
public function preAddToEditArray(&$record, $mode) { | |||
$order = array("description", "supplier_id", "amount", "delivery_date", "selling_price"); | |||
foreach ($order as $k => $v) { | |||
$this->setAttributeOrder($v, ($k + 1) * 100); | |||
} | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Revision as of 14:02, 9 September 2008
|
ATK Howto: Ordering attributes within a node
|
Ordering attributes within a node
If you have an atkNode, attributes (i.e. database columns) appear in the order in which they are added via atkNode::add().
If you have an atkMetaNode (or derived class), fields appear in the order in which they appear in the database. To control the order in which attributes appear within a node (i.e. on a "page"), use atkMetaPolicy::setOrder(), atkMetaPolicy::setIncludes() or the $order argument to either atkMetaNode::add() or atkMetaPolicy::add(). If you don't have access to an atkMetaPolicy, use atkMetaNode::setAttributeOrder().
Examples
With atkMetaPolicy:
public static function meta(atkMetaPolicy $policy) {
$policy->add("invoice_start_date", "atkDateAttribute");
$policy->add("invoice_end_date", "atkDateAttribute");
$policy->setOrder(array(
"invoice_start_date",
"invoice_end_date"
));
}
With atkMetaNode:
public function preAddToEditArray(&$record, $mode) {
$order = array("description", "supplier_id", "amount", "delivery_date", "selling_price");
foreach ($order as $k => $v) {
$this->setAttributeOrder($v, ($k + 1) * 100);
}
}
(In the case of atkMetaNodes, the order in which attributes are added has no effect because they configure themselves via database metadata, and attributes are added to nodes before both the settings from atkMetaNode::meta() are applied, and the atkMetaNode::postMeta() method is run--"adding" an attribute via either of these methods reconfigures an existing attribute. Attributes will appear in the order in which they are added in a constructor, but this is discouraged.)
Independently ordering attributes on the "admin" and "view" pages
If you want your attributes to appear in one order in the "admin" (list) page, and in another in the "view" (detail) page, you can do something like the following to ensure that the "name" attribute will appear before the "email" attribute of "view" pages:
public function action_view($handler) {
$this->setAttributeOrder("name", 10);
$this->setAttributeOrder("email", 20);
$this->attribSort();
$handler->action_view($handler);
}
(Note that where they will appear in relation to the other attributes is dependent on the "order" value of the other attributes.)