如何在其他子域上创建菜单项?


8

我想在Joomla 2.5中创建一个像这样的菜单结构:

  • 根(www.example.com
    • 关于(www.example.com/about
    • 网站(a.example.com
    • 网站b(b.example.com

是否可以创建具有不同子域的菜单项,如何创建它们?我以前使用过CMS“ typo3”,这样做没有问题,但是长时间在互联网上搜索并没有帮助我解决此问题。

编辑: 请注意,a.example.com并且b.example.com在相同的Joomla安装中,因此我想使用一个子域创建一个新的“单一文章”。


1
请为我们提供有关您的Joomla设置的更多信息。您如何从一个Joomla安装中提供子域?
TryHarder 2014年

1
站点a和站点b的内容是什么?这些仅仅是链接到文章的单个菜单项,还是它们自己的菜单和页面更加健壮?
David Fritsch 2014年

对不起,我昨天没有时间回答。我会将这些子域提供给相同的Joomla安装,然后joomla或组件必须进行重定向(a.example.com而不是www.example.com/a.hmtl)–
Marc T.

Answers:


4

我没有尝试过,但是Artio JoomSef声称提供了这种功能。
您可以指定网站的各个部分以用于不同的子域。可能值得检查一下。

Artio JoomSEF文档

JoomSEF-子域配置

如果您正在寻找更复杂的配置,则Joomla MultiSites扩展允许您通过一次安装以多种配置运行许多joomla站点。此处的另一个答案中提供了此JED部分的链接。


简短地看,这几乎是我想要的。我也知道“多站点”组件,但是我不需要多个网站。
Marc T.

2

对于您需要链接到子域的菜单项,请转到:

menu-item parameters > menu item type > system links > choose "External URL"

然后,Link您可以在字段中输入子域的URL。


抱歉,我还不够清楚。我在上面做了编辑。它应该是相同的joomla安装和相同的站点。
Marc T.


1

如果您不想为此使用外部组件,则可以在菜单中创建一个指向的外部URL,a.example.com并使用.htaccess文件从网站的现有链接中获取内容。

例如

<IfModule mod_rewrite.c>
    RewriteEngine on

    RewriteCond %{HTTP_HOST} ^a.example.com
    RewriteRule ^(.*) http://example.com/$1 [P]
</IfModule>

假设,如果您的用户访问了该URL a.example.com/user/sd,则内容将example.com/user/sd不更改浏览器上的实际URL。

仅当您熟悉.htaccess文件用法并且可以手动编辑时,才使用此方法。如果您不想只使用几个URL来使用整个新的扩展名,这将很有用。


0

我知道这个问题有点老了,但我想知道同样的事情,这是我想出的解决方案,如果您使用一些额外的代码更改模板index.php文件,则可以基于子域创建多个模块位置,然后将正确的菜单项分配给相关的子域。

    $dom = explode ( '.', str_replace ( '//', '.', JURI::base () ) ) ;
    $sub = ( in_array ( 'plus', $dom ) ? 'plus' : ( in_array ('group', $dom) ? 'group' : 'home' ) ) ;
    if ($this->countModules('navigation'.$sub )) : ?>
        <nav class="navigation">
            <jdoc:include type="modules" name="navigation<?php echo $sub ?>" style="html5" />
        </nav>
    <?php  endif; ?>

在上面的示例中,以$ sub开头的行是您需要针对自己的网站进行自定义的行,目前,该示例根据子域为导航模块创建了一个空间-这是为具有两个子域和一个站点的网站创建的通用域,因此它为每个子域创建三个导航位置-navigationhome navigationplus和navigationgroup。

该代码要注意的几件事-

找到子域,我已经使用了in_array函数。我本可以在$ dom [1]上使用switch语句来找到子域,但是如果有人像在$ dom [1]中那样输入www.plus.mysite.co.uk之类的东西,这将无法工作...例如

    switch ( $dom[1] )
    {
        case 'group' : $sub = 'group' ; break ;
        case 'plus' : $sub = 'plus' ; break ;
        default : $sub = 'home' ; break ;
    }

初始爆炸使用str_replace将//替换为。这是为了使初始的http / https最终位于其自己的数组中($ dom [0]将始终包含http / https,如果您想根据加载的协议显示不同的站点,我想可以进一步使用它,如果那样的话那时没有人放在类似http://plus.mysite.co.uk的东西中,那么第一个数组将包含http:// plus,in_array将不返回任何匹配项。

请记住,如果子域与站点域相同,则需要确保它是?中的最后一个?:语句链,否则它将自己分配给其他子域-例如,如果您有两个子域,一个叫site.site.co.uk,另一个叫site1.site.co.uk,则下面的语句将起作用

    $sub = ( in_array ( 'site1' ) ? 'site1' : ( in_array ( 'site' ) ? 'site' : 'site' ) ) ;
    //it never reaches the in_array ( 'site' ) if sub domain is site1

但在这种情况下,这两种方法都无法正常工作...

    $sub = ( in_array ( 'site' ) ? 'site' : ( in_array ( 'site1' ) ? 'site1' : 'main' ) ) ; 
    // all domains would be referred to as site because XXX.site.co.uk provides a match
    $sub = ( in_array ( 'site1' ) ? 'site1' : ( in_array ( 'site' ) ? 'site' : 'main' ) ) ; 
    // www.site.co.uk would still be site and not main

您不太可能以这种方式使用它们,但是值得注意。


-1

是的,您可以在Joomla中创建该菜单结构。通常,菜单项指向指定项和其他参数的组件中的视图。

当使用学习演示数据安装Joomla时,您会注意到两个完全不同的示例站点,包括学习演示,它向您教授有关Joomla的所有知识。


你能解释一下吗?我从未见过像股票joomla安装这样的子域。始终需要SEF插件来覆盖库存。是的,这是两个外观不同的网站,但不是从菜单中以子域作为其网址。
Brian Peat

joomla网站的内容与(子)域无关。您可以配置网络和Web服务器来处理该问题。
sovainfo,2014年

是的,但是您的答案实际上并没有提供解决方案。我怀疑该解决方案包括正确设置dns,然后使用外部菜单链接将用户发送到子域名。否则,您将只停留在joomla的常规页面中(如果您只是链接到文章)。这根本不是直接的设置。
Brian Peat 2014年

没有明确的说明。回想一下几年前使用hikashop开设两家商店的情况。不要记得细节。您可能希望.htaccess中的某些内容直接定向到适当的URL。非常取决于您的要求。
sovainfo 2014年

我建议然后删除此答案。它实际上并没有为OP提供很多信息。
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.