1. The <xen:description> at this case does not use any attributes, but there are other tags that do, for example <xen:if> has several types of attributes that can be used such as is="(CONDITION)" or hascontent="true" which actually requires <xen:contentcheck> tag within that <xen:if> tag.
2. As King says no they are not global, but $visitor, $xenOptions, $xenCache, $debugMode, $visitorLanguage are all global and can be used in every container template as well normal default templates. Take a look inXenForo_Dependencies_Abstract:
reRenderView function in library/XenForo/Dependencies/Abstract.php, the Public.php in that same path would also be useful for the front-end. The back-end is the Admin.php. In the public side (FrontEnd) there are other default variables such as $visitorStyle, $userFieldsInfo, Take a look in the inXenForo_Dependencies_Public:
reRenderView
3. To understand how {xen:datetime} works take a look at the function DateTime.php in XenForo_Template_Compiler_Function_DateTime (library/XenForo/Template/Compiler/Function/DateTime.php)
WHen you see <xen:description> this refers to the Tag folder of the Template/Compiler/Tag directory, when you see {xen:datetime} this references to the Template/Compiler/Function directory.
In the Function for DateTime.php
PHP:
<?php
/**
* Class to handle compiling template function calls for "date", "time", and "datetime".
* A formatted date or time will be output based on the timestamp in the first argument
* and the browsing user's language.
*
* An optional format override can be passed as the second argument. If provided,
* this argument should be a named format.
*
* @package XenForo_Template
*/
class XenForo_Template_Compiler_Function_DateTime implements XenForo_Template_Compiler_Function_Interface
{
/**
* Compiles the function call.
*
* @param XenForo_Template_Compiler The invoking compiler
* @param string Name of the function called
* @param array Arguments to the function (should have at least 1)
* @param array Compilation options
*
* @return string
*/
public function compile(XenForo_Template_Compiler $compiler, $function, array $arguments, array $options)
{
$argc = count($arguments);
if ($argc != 1 && $argc != 2)
{
throw $compiler->getNewCompilerArgumentException();
}
if (empty($arguments[1]))
{
$arguments[1] = '';
}
switch ($function)
{
case 'date':
case 'time':
case 'datetime':
$phpFunction = $function;
break;
default:
$phpFunction = 'datetime';
}
return 'XenForo_Template_Helper_Core::' . $phpFunction
. '(' . $compiler->compileAndCombineSegments($arguments[0], array_merge($options, array('varEscape' => false))) . ', '
. $compiler->compileAndCombineSegments($arguments[1], array_merge($options, array('varEscape' => false))) . ')';
}
}
Is reference to XenForo_Template_Helper_Core::datetime($date, 'plain'); is what it ends up being if you take a look in library/XenForo/Template/Helper/Core.php
search for
PHP:
public static function dateTime($timestamp, $format = null)
in Core.php
as I am looking it apparently means that it will still call this method even if it case insensitive. What happens is the format is "plain" that means it gets passed to
PHP:
return XenForo_Locale::dateTime($timestamp, $format, self::$_language);
Which is located in library/XenForo/Locale.php
Using "plain" makes it use the default:
PHP:
default:
$dateTimeFormat = $language['date_format'] . '|' . $language['time_format'];
$formatPhrase = 'date_x_at_time_y';
Which in the format Phrase date_x_at_time_y if you look it up it will be...
when using "html" it shows
PHP:
return self::callHelper('datetimehtml', array($timestamp));
Which eventually calls the helper
PHP:
/**
* Returns an <abbr> tag with a date suitable for Javascript refreshing
*
* @param integer $timestamp
* @param array $attributes
*
* @return string <abbr class="DateTime" data-unixtime="$timestamp"...
*/
public static function helperDateTimeHtml($timestamp, $attributes = array())
In there you can see how it is outputted which is in the end becomes
PHP:
$tag = 'span';
$data = ' title="' . $time['string'] . '"'; // empty this to remove tooltip from non-relative dates
$value = $time['date'];
and outputs as
PHP:
return "<{$tag} class=\"DateTime{$class}\"{$attribs}{$data}>{$value}</{$tag}>";
Hope this helps!