Joomla 2.x, 3.x useful code cheatsheet

php

URL

// 絕對地址
JURI::root();
// 相對地址
JURI::base(true);

修改當前URL的參數

JUri::reset(); // 防止實例被幹擾
$uri = JUri::getInstance();
$uri->setVar('order', $direction);
$url = $uri->toString();

得到POST & GET

$input = new JInput();
$input->get('Itemid', 0, 'int');
$input->get('cid', array(), 'array');

JObject轉換成Array

JArrayHelper::fromObject($config);
 
Array轉換成Object:$obj = new JRegistry($dataConf);

JObject轉換成PHP Code

$str = $c->toString('PHP', array('class' => 'JConfig', 'closingtag' => false));

文件寫入

JFile::write($file, $str);

拋出異常

JError::raiseWarning(21, JText::_('WARNFS_ERR02'));

編輯器

$editor = JFactory::getEditor();
$editor->display(<post name>,  <data>, '100%;', '350', '75', '20', array('pagebreak'));

Log

jimport('joomla.log.log');
JLog::addLogger(array('text_file' => 'my-error-file.php'));
JLog::add('some error message');

Cache

$cache = JFactory::getCache('com_languages', '');
if (!$languages = $cache->get('languages'))
{
  $cache->store($languages, 'languages');
}

Session

$session = JFactory::getSession();
$session->set($key, $value, $namespace);
$session->get($key, $defaultValue, $namespace);
$session->clear($key, $namespace);
$session->has($key, $namespace);

registry

就像全局變量,設置的值只在當前進程有效。經常使用於配置,或者component向module傳遞數據。css

jimport('joomla.registry.registry');
$registry = JRegistry::getInstance($id);
$registry->get('vendor.param1', $default);
$registry->set('vendor.param1', $value);

Profile Plugin是否已開啓

JPluginHelper::isEnabled('user', 'profile');

獲得configuration.php的值

$config = JFactory::getConfig();
$config->get('sitename');

動態添加用戶

$user = new JUser;
$data = array(
    'name' => 'systemwilliam',
    'username' => 'systemwilliam',
    'email' => 'systemwilliam@qq.com',
    'password' => '123456',
    'usertype' => 'deprecated',
    'activation' => '',
    'block' => 0,
    // register group
    'groups' => array(2)
);
$user->bind($data);
$user->save();
echo $user->id;

dump

$data = array(1,2,3);
echo JUtility::dump($data);

homepage識別

$app = JFactory::getApplication();
$isHome = $app->getMenu()->getActive()->home;

JS & CSS

$doc = JFactory::getDocument();
$doc->addStyleSheet(JUri::base().'/css/template_css.css');
$doc->addScript(JUri::base().'/js/modernizr.js');

分頁

$limit = 10;
$total = 100;
$start = 0;
jimport('joomla.html.pagination');
$pagination = new JPagination($total, $start, $limit);
$pagination->getPagesLinks();

組件參數設置與取值方法

設置參數:administrator/com_xxx/config.xml
獲取參數:$cparams =JComponentHelper::getParams('com_xxx');html

MENU參數設置與取值方法

設置參數:com_xxx/views/xxx/tmpl/default.xml
獲取參數:JFactory::getApplication()->getParams();sql

任意文本支持內容插件(激活onContentPrepare事件)

require_once(JPATH_ROOT.DS.'components'.DS.'com_content'.DS.'models'.DS.'articles.php');
$model = new ContentModelArticles();
$items = $model->getItems();
$article = array_pop($items);
JPluginHelper::importPlugin('content');
$dispatcher    = JDispatcher::getInstance();
$article->text = $html;
$tmp_param = new JParameter();
$dispatcher->trigger('onContentPrepare', array ('com_content.article', &$article, &$tmp_param));
$html = $article->text;

數據查詢

$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('contact.user_id, MAX(contact.id) AS id, contact.language');
$query->from('##__contact_details AS contact');
$query->where('contact.published = 1');
$query->group('contact.user_id, contact.language');
$query->order('contact.ordering');
$db->setQuery($query);
$rows = $db->loadObjectList();

數據插入

$query = $db->getQuery(true);
$query->insert('#__a')->set('id = 1');
$db->setQuery($query);
$db->query();

數據更新

$query = $db->getQuery(true);
$query->update($db->quoteName($this->_tbl));
$query->set('asset_id = ' . (int) $this->asset_id);
$query->where($db->quoteName($k) . ' = ' . (int) $this->$k);
$db->setQuery($query);
$db->query();

SQL數據查詢

$db = JFactory::getDbo();
$sql = 'SELECT * FROM ##__users WHERE state=1';
$db->setQuery($sql);
$rows = $db->loadObjectList();
foreach($rows as $row) {
    echo $row->name;
    echo $row->email;
}

SQL插入數據並提取最後ID

$db = JFactory::getDbo();
$sql = 'INSERT INTO jos_xxx (name)VALUES('.$db->Quote('william').')';
$db->setQuery($sql);
$db->query();
$db->insertid();

全部UserID的數組

$db = JFactory::getDbo();
$sql = 'SELECT id FROM ##__users WHERE state=1';
$db->setQuery($sql);
$userIds = $db->loadColumn();
echo implode(', ', $userIds);

SQL更新記錄

$db = JFactory::getDbo();
$title = '????';
$sql = 'UPDATE ##__content SET title='.$db->Quote($title).' WHERE id=1';
$db->setQuery($sql);
$db->query();

user存取數據

$user = JFactory::getUser($userId);
$user->name = 'newname';
$user->save();

menu存取數據

$app = JFactory::getApplication();
$menu = $app->getMenu();
$menuitem = $menu->getItem($Itemid);

parameter存取數據

JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR.'/tables');
// class name = JTableMytable
$table = JTable::getInstance( 'mytable');
$table->load($id);
$params = new JParameter($table->params);
$params->set($key,$value);
$table->params = $params->toString();
$table->store();

基於JTable存取數據,必須有JTable實例

JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR.'/tables');
// class name = XxxTableMytable
$table = JTable::getInstance( 'mytable', 'XxxTable');
$table->load($id);
$table->title = '???';
$table->store();

若是table與model類在同一個組件裏,能夠用JModel::getTable

JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR.'/tables');
// class name = XxxTableMytable
$table = $this->getTable( 'mytable', 'XxxTable');
$table->load($id);
get item attribute
$articleParams = new JRegistry;
$articleParams->loadString($item->attribs);
$item->alternative_readmore = $articleParams->get('alternative_readmore');

set item attribute

JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR.'/tables');
// class name = JTableMytable
$table = JTable::getInstance( 'mytable');
$table->load($id);
$articleParams = new JRegistry;
$table->attribs = $articleParams->toString();
$table->store();

基於JModel存取數據,一定存在JModel實例

$model = JModel::getInstance('Articles', 'ContentModel');
$model->setState('filter.state', 1);
$model->setState('list.ordering', 'publish_up');
$items = $model->getItems();

獲得category對象

jimport( 'joomla.application.categories' );
$category = JCategories::getInstance('Content')->get($this->item->catid);

獲得文章列表

$model = JModel::getInstance('Articles', 'ContentModel', array('ignore_request' => true));
$model->setState('params', new JRegistry(array()));
$model->setState('filter.state', 1);
$model->setState('list.ordering', 'publish_up');
$items = $model->getItems();

獲取當前用戶的可見等級,可見等級能夠在後臺設置

$view_levels = JFactory::getUser()->getAuthorisedViewLevels();

判斷是否管理員

JFactory::getUser()->authorise('core.admin');
JFactory::getUser()->authorise('core.create', 'com_users');

Language, 判斷當前語言

JFactory::getLanguage()->getTag() == 'en-GB';

redirect

$app = JFactory::getApplication();
$app->redirect(JRoute::_('index.php'), false);

獲得文章地址

JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catid, $item->language));

調用CMS內容處理插件

$dispatcher    = JDispatcher::getInstance();
JPluginHelper::importPlugin('content');
$this->item->text = '{flv}/'.$images->video.'{/flv}';
$dispatcher->trigger('onContentPrepare', array ('com_content.article', &$this->item, &$this->params, 0));
echo $this->item->text;
相關文章
相關標籤/搜索