Contexts
When creating a new pane for panels 2, you might add a content type like:
$types['foo'] = array(
'title' => t('Foo'),
'icon' => 'icon_node.png',
'path' => panels_get_path('content_types/node'),
'category' => array(t('FooP'), -9),
'required context' => new panels_required_context(t('Node'), 'node'),
);
This new pane will only be available if a node context exists. What if you only want it to be available to specify node types, because you require specific CCK fields? You can actually require a context of a specific node type.
$types['foo'] = array(
'title' => t('Foo'),
'icon' => 'icon_node.png',
'path' => panels_get_path('content_types/node'),
'category' => array(t('FooP'), -9),
'required context' => new panels_required_context(t('Node'), 'node-page'),
);
Now the pane will only be available when a context to a 'page' node exists.
Relationships
When creating a relationship between argument contexts and other contexts, it's also possible to specify node types. You may normally write a relationship like:
function my_module_panels_relationships() {
$args['foo_from_node'] = array(
'title' => t("Foo from Node"),
'keyword' => 'foo',
'description' => t('Adds a Foo from a Node context.'),
'required context' => new panels_required_context(t('Node'), 'node'),
'context' => 'my_module_foo_from_node_context',
);
return $args;
}
function my_module_foo_from_node_context($context = NULL, $conf) {
// If unset it wants a generic, unfilled context, which is just NULL
if (empty($context->data)) {
return panels_context_create_empty('node', NULL);
}
if ($node = get_some_other_node($context->data)) {
return panels_context_create('node', $node);
}
}
This relationship will require a node context before adding a 'foo' context. However, it's simple to add a node type specific requirement:
function my_module_panels_relationships() {
$args['foo_from_page'] = array(
'title' => t("Foo from Page"),
'keyword' => 'foo',
'description' => t('Adds a Foo from a Page context.'),
'required context' => new panels_required_context(t('Page'), 'node-page'),
'context' => 'my_module_foo_from_page_context',
);
return $args;
}
function my_module_foo_from_page_context($context = NULL, $conf) {
// If unset it wants a generic, unfilled context, which is just NULL
if (empty($context->data)) {
return panels_context_create_empty('node', array('types' => array('page')));
}
if ($node = get_some_other_node($context->data)) {
return panels_context_create('node', $node);
}
}
Now the relationship will required a 'page' node context before allowing the 'foo' context to be added.