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

时间:2014-08-03 13:56:42

标签: php html joomla components

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

以下是我已经完成的事情:

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

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

1 个答案:

答案 0 :(得分:0)

1 /你不能使用菜单链接,如果你的视图链接到菜单项,Joomla会自动生成网址。 如果您想允许用户在菜单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;            
     }

}

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

此处有更多信息:http://docs.joomla.org/J2.5:Creating_a_System_Plugin_to_augment_JRouter

2 /您只需添加到url&amp; tmp =组件,Joomla将删除标准模板和模块,它将只渲染组件。

3 /您可以使用

对于脚本:

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

对于css文件:

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

此处有更多信息http://docs.joomla.org/Adding_JavaScripthttp://docs.joomla.org/JDocument/addStyleSheet