我最近推出了一个基于laravel的电子商务网站。而现在我认为实施AMP是一个好主意,因为它现在支持电子商务(甚至shopify和ebay正在实施它)
所以我的问题是如何在laravel上实现AMP?有没有办法在桌面版上使用desktopMainTempalte.blade.php并在移动版上切换到mobileMainTemplate.blade.php?我只是不想为m.domain.com创建移动设备的不同域。我想要一些有创意的东西,但我不确定我是否朝着正确的方向前进。
如果你穿着我的鞋子,你会怎么做?
答案 0 :(得分:3)
有几种方法可以在您的Web应用程序中实现AMP页面(无论框架如何)。
一个例子是https://www.theguardian.com做到这一点的方式:通过创建一个新的sumbomain& thetheian.com"以及主网站上的每一页" www.theguardian.com"有一个到同一页面的规范链接,但AMP版本,反之亦然。
正如你所看到的,它们是相同的,但并不完全相同。普通页面中的大多数元素都会从放大器页面中删除(因为AMP不允许它们,或者是AMP的不良做法)。
所以你有它!为Laravel项目实现AMP的一种方法是使用单独的视图(资源/视图/放大器)和处理它们的Controller。
AMP视图可以作为功能的一个很好的指南是HERE。
答案 1 :(得分:3)
使用不同的路线和控制器来执行相同但具有不同视图的操作非常困难。您可以这样做,以获得更好的方法。
/amp/
网址使用相同的Web控制器view()
帮助程序要捕获/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将不知道如何在它们之间进行更改。