【发布时间】:2013-01-07 10:31:25
【问题描述】:
我在Joomla 2.5 中创建了一个自定义组件。在这个组件中,我想获取com_users 中可用的所有用户。为此,我想让你知道,我如何在我的组件中使用com_users model class。任何人都对如何做到这一点有建议。
【问题讨论】:
标签: joomla joomla2.5 joomla-extensions
我在Joomla 2.5 中创建了一个自定义组件。在这个组件中,我想获取com_users 中可用的所有用户。为此,我想让你知道,我如何在我的组件中使用com_users model class。任何人都对如何做到这一点有建议。
【问题讨论】:
标签: joomla joomla2.5 joomla-extensions
根据您想在哪里使用该模型,您只需询问 Joomla!为你加载它。
在JController 类或子类中,您可以调用getModel,传入模型名称和组件前缀...
例如
JModel::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_users/models/');
$model = $this->getModel($name = 'User', $prefix = 'UsersModel');
可能需要使用JModel::addIncludePath() 添加要加载的外部模型的路径,如上所示。
或者,如果您确定模型名称和类前缀,您可以使用JModel 的getInstance() 来创建所需的模型对象...例如
$model = JModel::getInstance('User', 'UsersModel');
或者在一个视图中你可以:
$myModel = $this->getModel('myOtherModel');
$this->setModel($myModel);
注意在第一行中,我们传递了我们想要的模型名称,通常你调用 getModel 没有任何参数来为你的组件视图控制器加载默认模型。在第二行中,由于我们只是将模型传递给setModel(),它不会使其成为视图使用的默认模型。
当我们以后想要使用我们的模型对象时,我们可以像这样指定我们想要使用的对象:
$item = $this->get('Item');
$otherItem = $this->get('Item', 'myOtherModel' );
第一行使用视图的默认模型(因为我们在可选参数中指定了一个)。第二行使用来自myOtherModel 的getItem()。
这一切都有效,因为JView(在libraries/joomla/application/view.php中)有这些方法:
/**
* Method to get the model object
*
* @param string $name The name of the model (optional)
*
* @return mixed JModel object
*
* @since 11.1
*/
public function getModel($name = null)
{
if ($name === null)
{
$name = $this->_defaultModel;
}
return $this->_models[strtolower($name)];
}
/**
* Method to add a model to the view. We support a multiple model single
* view system by which models are referenced by classname. A caveat to the
* classname referencing is that any classname prepended by JModel will be
* referenced by the name without JModel, eg. JModelCategory is just
* Category.
*
* @param JModel &$model The model to add to the view.
* @param boolean $default Is this the default model?
*
* @return object The added model.
*
* @since 11.1
*/
public function setModel(&$model, $default = false)
{
$name = strtolower($model->getName());
$this->_models[$name] = &$model;
if ($default)
{
$this->_defaultModel = $name;
}
return $model;
}
【讨论】:
$model = $this->getModel($name = 'User', $prefix = 'UsersModel'); 中并回显它,但它根本没有返回任何东西。
JModel 提供查看路径...例如t 可能需要使用JModel::addIncludePath()添加要加载的外部模型的路径@
试试这样的
if(!class_exists('UsersModelUser')) require(JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_users'.DS.'models'.DS.'user.php');
您可以从管理端或前端添加模型的正确路径。
VM2.x 组件就是这样使用的。
或者您只需要一些关于您可以使用的用户的详细信息。
$user = JFactory::getUser();
希望对你有所帮助..
【讨论】:
require。有没有Joomla方法或插件,会有所帮助。跨度>