【问题标题】:How to use JRouter to rewrite controller and task URLs?如何使用 JRouter 重写控制器和任务 URL?
【发布时间】:2012-02-14 04:08:42
【问题描述】:

我正在使用带有 router.php 文件的 Joomla 1.5 来重写 views 的 URL。以下是router.php的内容:

<?php
function PvcCalcProBuildRoute( &$query )
{
  $segments = array();
  if(isset($query['view']))
  {
    $segments[] = $query['view'];
    unset( $query['view'] );
  }
  return $segments;
}
function PvcCalcProParseRoute( $segments )
{
  $vars = array();
  switch($segments[0])
  {
    case 'cart':
    $vars['view'] = 'cart';
    break;
    case 'checkout':
    $vars['view'] = 'checkout';
    break;
    case 'login':
    $vars['view'] = 'login';
    break;
    case 'orders':
    $vars['view'] = 'orders';
    break;
    case 'offers':
    $vars['view'] = 'offers';
    break;
  }
  return $vars;
}
?>

我需要为 controllertask 启用 URL 重写。例如这一行:

JRoute::_('index.php?option=com_pvccalcpro&amp;task=helpers');

我想转换成/component/pvccalcpro/helpers.js

还有这一行:

JRoute::_('index.php?option=com_pvccalcpro&amp;controller=orders&amp;task=js');

我想转换成/component/pvccalcpro/orders.js

我试图弄清楚如何通过官方Joomla Routing Manual 来实现这一点,但是花了这么多天之后,我仍然没有成功。也许我错过了什么?

以下是我的 orders 控制器的内容,例如:

<?php
// no direct access
defined('_JEXEC') or die();
jimport('joomla.application.component.model');
class PvcCalcProControllerOrders extends PvcCalcProController
{
    function display()
    {
      parent::display();
    }

    function js()
    {
      $t=time()+31536000;
      $expires = gmdate('D, d M Y H:i:s \G\M\T',$t);
      header('Content-type: text/javascript; charset=utf-8');
      header('Vary: Accept-Encoding');
      header('Last-Modified: Tue, 27 Dec 2001 07:05:43 GMT');
      header('Expires: '.$expires);
      header('Cache-Control: public, max-age=31536000');
      require_once(JPATH_COMPONENT.DS.'assets/js/orders.js');
      die();
    }
}
?>

【问题讨论】:

    标签: joomla url-routing joomla1.5 joomla-sef-urls sef


    【解决方案1】:

    在您的两个 JRoute 示例中,您将路径传递给组件,但希望它返回 Javascript 文件的路径。

    JRoute 用于为 Joomla! 创建人类可读的 URL!从外观上看,您尝试将其用于 Javascript 文件的组件。

    引用Joomla! Doc's page - “Joomla 最初只能为内置组件创建人类可读的 URL。”

    【讨论】:

    • 我添加了 orders 控制器的内容,以便更好地了解我如何使用 js 文件。我正在使用这种方法来获得多语言能力。
    猜你喜欢
    • 2015-01-31
    • 2020-12-21
    • 2023-03-28
    • 2016-10-02
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多