【问题标题】:How to use com_users model class in my custom component in joomla如何在 joomla 的自定义组件中使用 com_users 模型类
【发布时间】:2013-01-07 10:31:25
【问题描述】:

我在Joomla 2.5 中创建了一个自定义组件。在这个组件中,我想获取com_users 中可用的所有用户。为此,我想让你知道,我如何在我的组件中使用com_users model class。任何人都对如何做到这一点有建议。

【问题讨论】:

    标签: joomla joomla2.5 joomla-extensions


    【解决方案1】:

    根据您想在哪里使用该模型,您只需询问 Joomla!为你加载它。

    JController 类或子类中,您可以调用getModel,传入模型名称和组件前缀...

    例如

    JModel::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_users/models/');
    $model = $this->getModel($name = 'User', $prefix = 'UsersModel');
    

    可能需要使用JModel::addIncludePath() 添加要加载的外部模型的路径,如上所示。

    或者,如果您确定模型名称和类前缀,您可以使用JModelgetInstance() 来创建所需的模型对象...例如

    $model = JModel::getInstance('User', 'UsersModel');
    

    或者在一个视图中你可以:

    $myModel = $this->getModel('myOtherModel');
    $this->setModel($myModel);
    

    注意在第一行中,我们传递了我们想要的模型名称,通常你调用 getModel 没有任何参数来为你的组件视图控制器加载默认模型。在第二行中,由于我们只是将模型传递给setModel(),它不会使其成为视图使用的默认模型。

    当我们以后想要使用我们的模型对象时,我们可以像这样指定我们想要使用的对象:

    $item = $this->get('Item');
    $otherItem = $this->get('Item', 'myOtherModel' );
    

    第一行使用视图的默认模型(因为我们在可选参数中指定了一个)。第二行使用来自myOtherModelgetItem()

    这一切都有效,因为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()添加要加载的外部模型的路径@
    • 添加了我的模型类路径后什么也没有发生。
    【解决方案2】:

    试试这样的

    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方法或插件,会有所帮助。跨度>
    • 只有 require 或 include 函数来包含核心文件,如果你想包含库那么你可以使用 jimport()
    猜你喜欢
    • 2011-12-25
    • 2014-03-03
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    相关资源
    最近更新 更多