在根 URL 端点公开 Joomla 组件视图

Posted

技术标签:

【中文标题】在根 URL 端点公开 Joomla 组件视图【英文标题】:Exposing Joomla component view at root URL endpoint 【发布时间】:2014-09-26 03:23:51 【问题描述】:

我是 joomla 的新手,我正在尝试编写一个可安装的 Joomla 组件,该组件在此 URL 上公开一个 html 页面:http://localhost/joomla/someurl(Joomla 安装在 /joomla/)

这是我已经完成的:

    我在安装的/joomla/components/ 文件夹中创建了一个基本组件 我添加了一个控制器 router.php 并创建了一个要显示的视图。我的组件名称是mycomponent 我尝试通过多种方式访问​​我的default 查看页面。以下工作: /joomla/components/mycomponent /joomla/index.php?option=com_mycomponent

我有以下问题:

    如何在给定的 URL 端点公开我的组件视图?我希望默认视图的内容出现在/joomla/arbitraryurl/ 不使用 Joomla 布局(即裸 html 页面)呈现独立 HTML 页面的最佳方式是什么 从我的 HTML 链接到组件文件夹中存在的 CSS 和 JS 资源的最佳方法是什么,以确保到达正确的 URL。

【问题讨论】:

你的意思是说你想创建一个 sef 友好的 url 的? 【参考方案1】:

1/ 你不能使用菜单链接吗,如果你的视图链接到菜单项,Joomla 会自动生成 url。 如果您想允许用户在菜单中链接您的视图http://docs.joomla.org/J3.x:Developing_a_MVC_Component/Adding_a_menu_type_to_the_site_part

如果您无法将此视图链接到菜单项,我会在某些特定情况下使用系统插件。 系统插件将增强 JRouter,您将能够为任何 url 路由到您的组件。

//-- No direct access
defined('_JEXEC') || die('=;)');


class plgSystemYourplugin extends JPlugin


    public function onAfterInitialise()
    
       $app = JFactory::getApplication();
      // get the router
      if ($app->isSite()) 
    $router = $app->getRouter();                
    $router->attachParseRule(array($this, 'replaceRoute'));
      
    

    /**
     * @param   JRouterSite &$router  The Joomla Site Router
     * @param   JURI  &$uri  The URI to parse
     *
     * @return  array  $vars The array of processed URI variables
     */
    public function replaceRoute (&$router, &$uri)
    
    $array = array();

    $yourURI = 'whateverIwant' //here is your custom uri
    $UriSegs = sizeof(explode('/',$yourURI));
    $Segs = explode('/',$yourURI);

    $path = explode('/',$uri->getPath());

    if(count($Segs) < count($path))
        for ($index = $UriSegs-1; $index < count($Segs); $index++) 
            if($Segs[$index]!==$path[$index])
                return $array;
            
        
        if(!isset($path[1]) || $path[1]==='')
            return $array;
        

        JRequest::setVar('option','com_yourcomponent');
        JRequest::setVar('view','yourView');

        $uri->reset();
    

    return $array;            
     


如果用户需要页面http://yourdomaine.com/whateverIwant,这会将用户重定向到 index.php?option=com_yourcomponent&view=yourView

更多信息在这里:http://docs.joomla.org/J2.5:Creating_a_System_Plugin_to_augment_JRouter

2/ 你可以只添加到 url &tmp=component,Joomla 会移除标准模板和模块,它只会渲染组件。

3/ 你可以使用

对于脚本:

$document-&gt;addScript(JURI::root().'components/com_yourcomponent/assets/js/script.js');

对于 css 文件:

$document-&gt;addStyleSheet(JURI::root().'components/com_yourcomponent/assets/css/style.css');

更多信息在这里http://docs.joomla.org/Adding_javascript和http://docs.joomla.org/JDocument/addStyleSheet

【讨论】:

以上是关于在根 URL 端点公开 Joomla 组件视图的主要内容,如果未能解决你的问题,请参考以下文章

Joomla! 2.5 生成的URL中的组件菜单类型参数

在 Joomla 3 中向组件添加带有自定义 url 参数的菜单类型

多个端点以公开同一资源的不同视图

在 Joomla 组件方面需要帮助

Joomla 3.0 一个具有多个视图的组件

从模型到视图的 Joomla 组件数据