Source for file componentlayout.php
Documentation is available at componentlayout.php
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
jimport('joomla.filesystem.folder');
* Form Field to display a list of the layouts for a component view from
* the extension or template overrides.
protected $type =
'ComponentLayout';
* Method to get the field input for a component layout field.
* @return string The field input.
$clientId =
$this->element['client_id'];
$clientId =
$this->form->getValue('client_id');
$clientId = (int)
$clientId;
$extn = (string)
$this->element['extension'];
if (empty($extn) &&
($this->form instanceof
JForm))
$extn =
$this->form->getValue('extension');
$template = (string)
$this->element['template'];
$template_style_id =
$this->form->getValue('template_style_id');
$template_style_id =
preg_replace('#\W#', '', $template_style_id);
$view = (string)
$this->element['view'];
// If a template, extension and view are present build the options.
if ($extn &&
$view &&
$client)
||
$lang->load($extn .
'.sys', JPATH_ADMINISTRATOR .
'/components/' .
$extn, null, false, true);
// Get the database object and a new query object.
$query =
$db->getQuery(true);
$query->select('e.element, e.name')
->from('#__extensions as e')
->where('e.client_id = ' . (int)
$clientId)
->where('e.type = ' .
$db->quote('template'))
->where('e.enabled = 1');
$query->where('e.element = ' .
$db->quote($template));
$query->join('LEFT', '#__template_styles as s on s.template=e.element')
->where('s.id=' . (int)
$template_style_id);
// Set the query and load the templates.
$templates =
$db->loadObjectList('element');
// Build the search paths for component layouts.
$component_path =
JPath::clean($client->path .
'/components/' .
$extn .
'/views/' .
$view .
'/tmpl');
// Prepare array of component layouts
$component_layouts =
array();
// Prepare the grouped list
// Add a Use Global option if useglobal="true" in XML file
if ($this->element['useglobal'] ==
'true')
$groups[JText::_('JOPTION_FROM_STANDARD')]['items'][] =
JHtml::_('select.option', '', JText::_('JGLOBAL_USE_GLOBAL'));
// Add the layout options from the component path.
if (is_dir($component_path) &&
($component_layouts =
JFolder::files($component_path, '^[^_]*\.xml$', false, true)))
// Create the group for the component
$groups['_']['id'] =
$this->id .
'__';
$groups['_']['text'] =
JText::sprintf('JOPTION_FROM_COMPONENT');
$groups['_']['items'] =
array();
foreach ($component_layouts as $i =>
$file)
// Attempt to load the XML file.
unset
($component_layouts[$i]);
// Get the help data from the XML file if present.
if (!$menu =
$xml->xpath('layout[1]'))
unset
($component_layouts[$i]);
// Add an option to the component group
$component_layouts[$i] =
$value;
$text = isset
($menu['option']) ?
JText::_($menu['option']) :
(isset
($menu['title']) ?
JText::_($menu['title']) :
$value);
$groups['_']['items'][] =
JHtml::_('select.option', '_:' .
$value, $text);
foreach ($templates as $template)
$lang->load('tpl_' .
$template->element .
'.sys', $client->path, null, false, true)
||
$lang->load('tpl_' .
$template->element .
'.sys', $client->path .
'/templates/' .
$template->element, null, false, true);
$template_path =
JPath::clean($client->path .
'/templates/' .
$template->element .
'/html/' .
$extn .
'/' .
$view);
// Add the layout options from the template path.
if (is_dir($template_path) &&
($files =
JFolder::files($template_path, '^[^_]*\.php$', false, true)))
// Files with corresponding XML files are alternate menu items, not alternate layout files
// so we need to exclude these files from the list.
$xml_files =
JFolder::files($template_path, '^[^_]*\.xml$', false, true);
for ($j =
0, $count =
count($xml_files); $j <
$count; $j++
)
$xml_files[$j] =
basename($xml_files[$j], '.xml');
foreach ($files as $i =>
$file)
// Remove layout files that exist in the component folder or that have XML files
// Create the group for the template
$groups[$template->name] =
array();
$groups[$template->name]['id'] =
$this->id .
'_' .
$template->element;
$groups[$template->name]['text'] =
JText::sprintf('JOPTION_FROM_TEMPLATE', $template->name);
$groups[$template->name]['items'] =
array();
foreach ($files as $file)
// Add an option to the template group
->hasKey($key =
strtoupper('TPL_' .
$template->name .
'_' .
$extn .
'_' .
$view .
'_LAYOUT_' .
$value))
$groups[$template->name]['items'][] =
JHtml::_('select.option', $template->element .
':' .
$value, $text);
// Compute attributes for the grouped list
$attr =
$this->element['size'] ?
' size="' . (int)
$this->element['size'] .
'"' :
'';
// Compute the current selected values
$selected =
array($this->value);
'select.groupedlist', $groups, $this->name,
array('id' =>
$this->id, 'group.id' =>
'id', 'list.attr' =>
$attr, 'list.select' =>
$selected)
Documentation generated on Tue, 19 Nov 2013 14:56:25 +0100 by phpDocumentor 1.4.3