在根 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->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_javascript和http://docs.joomla.org/JDocument/addStyleSheet
【讨论】:
以上是关于在根 URL 端点公开 Joomla 组件视图的主要内容,如果未能解决你的问题,请参考以下文章