带有Laravel的Google AMP

时间:2016-09-26 16:32:07

标签: laravel laravel-blade amp-html

我最近推出了一个基于laravel的电子商务网站。而现在我认为实施AMP是一个好主意,因为它现在支持电子商务(甚至shopify和ebay正在实施它)

所以我的问题是如何在laravel上实现AMP?有没有办法在桌面版上使用desktopMainTempalte.blade.php并在移动版上切换到mobileMainTemplate.blade.php?我只是不想为m.domain.com创建移动设备的不同域。我想要一些有创意的东西,但我不确定我是否朝着正确的方向前进。

如果你穿着我的鞋子,你会怎么做?

4 个答案:

答案 0 :(得分:3)

有几种方法可以在您的Web应用程序中实现AMP页面(无论框架如何)。

一个例子是https://www.theguardian.com做到这一点的方式:通过创建一个新的sumbomain& thetheian.com"以及主网站上的每一页" www.theguardian.com"有一个到同一页面的规范链接,但AMP版本,反之亦然。

示例: 普通页面:LINK 页面的AMP版本:LINK

正如你所看到的,它们是相同的,但并不完全相同。普通页面中的大多数元素都会从放大器页面中删除(因为AMP不允许它们,或者是AMP的不良做法)。

所以你有它!为Laravel项目实现AMP的一种方法是使用单独的视图(资源/视图/放大器)和处理它们的Controller。

AMP视图可以作为功能的一个很好的指南是HERE

答案 1 :(得分:3)

使用不同的路线和控制器来执行相同但具有不同视图的操作非常困难。您可以这样做,以获得更好的方法。

  1. /amp/网址使用相同的Web控制器
  2. 通过修改view()帮助程序
  3. 来不同地查看功放页面

安培路线

要捕获/amp/条路线,请将其添加到您的RouteServiceProvider.php

protected function mapAmpRoutes()
{
    Route::group([
        'middleware' => 'web',
        'namespace' => $this->namespace,
        'prefix' => 'amp',
    ], function ($router) {
        require base_path('routes/web.php');
    });
}

还要更改您的map方法:

public function map()
{
    $this->mapAmpRoutes(); // <-- Add this

    $this->mapWebRoutes();

    $this->mapApiRoutes();
}

目前,所有example.com/amp/...之类的地址都将引用您的web.php路由。

放大器查看文件

现在,您应该自定义view()助手以为放大器呈现不同的视图。 使用查看功能在helpers.php目录中创建一个app/Http

function view($view = null, $data = [], $mergeData = [])
{
    $factory = app(Illuminate\Contracts\View\Factory::class);

    if (func_num_args() === 0) {
        return $factory;
    }

    //if amp, add '-amp' to view name
    if(request()->segment(1) == 'amp'){
        if(view()->exists($view . '-amp')){
            $view .= '-amp';
        }else{
            abort(404);
        }
    }
    return $factory->make($view, $data, $mergeData);
}

只有在将其添加到bootstrap/autoload.php文件

之前,该函数才会加载
require __DIR__.'/../app/Http/helpers.php'; // <-- add this (should be before require vendor/autoload.php)
require __DIR__.'/../vendor/autoload.php';

编辑::如果找不到bootstrap/autoload.php文件,请搜索vendor/autoload.php,因为laravel已将其删除。 (感谢 MinderMondo 的评论)

您现在可以添加带有“ -amp”后缀的任意视图。例如,如果您有index.blade.php,则放大器视图名称应为index-amp.blade.php

答案 2 :(得分:1)

简单的3个步骤Laravel AMP文章可能会有所帮助。 Laravel AMP optimization

答案 3 :(得分:0)

我使用AMP创建了一个站点,我的解决方案很简单,为路由新的GET规则添加:mobile/{articleSlug}/{pageNumber?},并在Controller中支持新功能,为新的AMP布局加载所有必要的东西。

如果我没错,你可以在同一条路线上设置AMP页面和普通页面 - Google将不知道如何在它们之间进行更改。