brabijan/nette-seo-components

Nette 框架的 SEO 组件

dev-master 2017-01-25 13:02 UTC

This package is not auto-updated.

Last update: 2024-09-22 07:18:13 UTC


README

这是为 Nette 框架 设计的 SEO 组件,它使用 Doctrine2。它允许您控制以下这些功能

  • 谷歌分析
  • 谷歌网站管理员工具
  • 自动生成 sitemap.xml
  • robots.txt
  • 元标签(标题、关键词、描述和机器人)
  • SEO 优化 URL

安装

安装 brabijan/nette-seo-components 的最佳方式是使用 Composer

$ composer require brabijan/nette-seo-components:@dev

然后您需要在 config.neon 中注册扩展。

extensions:
	- Brabijan\SeoComponents\DI\SeoExtension

使用方法

您必须在您的 BasePresenter 中插入以下行,并在您的 @layout.latte 中使用组件(通常是将 MetaTags 放在 <head> 中,将 GoogleAnalytics 放在 </body> 标签之前)

/** @var \Brabijan\SeoComponents\Components\MetaTagsFactory @inject */
public $metaTagsFactory;

/** @var \Brabijan\SeoComponents\Components\GoogleAnalyticsFactory @inject */
public $googleAnalyticsFactory;



public function createComponentMetaTags()
{
	return $this->metaTagsFactory->create();
}



public function createComponentGoogleAnalytics()
{
	return $this->googleAnalyticsFactory->create();
}

管理

应用程序目标

为了正确生成 sitemap.xml 或设置目标元数据,我们必须创建应用程序目标的列表。以 PagesManager 为例。如果我们想将其用作应用程序目标列表,则在它上面实现 ITargetSectionProvider。

<?php

namespace App\Model\Pages;

use Brabijan\SeoComponents\DI\ITargetSectionProvider;
use Brabijan\SeoComponents\Router\Target;

class PagesManager extends Object implements ITargetSectionProvider {


	/**
	 * @return Page
	 */
	public function getPagesList()
	{
		// return ...;
	}



	/**
	 * @return TargetSection
	 */
	public function getTargetSection()
	{
		$section = new TargetSection("Pages");
		foreach ($this->getPagesList() as $page) {
			$section->addTarget($page->name, new Target("Page", "show", $page->id));
		}

		return $section;
	}
	
}

并在您的 config.neon 中注册它

services
	-
		class: App\Model\Pages\PageManager
		tags: [ Brabijan.seo.targetSectionProvider ]

表单

库在 Brabijan\SeoComponents\Forms 命名空间中包含一些表单,您可以使用这些表单来设置谷歌分析、谷歌网站管理员工具和 robots.txt。

表单控件

在类 Brabijan\SeoComponents\Forms\Controls\SeoContainer 中,您可以找到一个容器,它允许您直接在表单中设置元标签和 URL。上面的例子是关于页面的,现在我们继续这个例子。

<?php

namespace App\AdminModule\Components;

use App\Model\Pages\Page;
use App\Model\Pages\PageManager;
use Brabijan\SeoComponents\Forms\Controls;
use Brabijan\SeoComponents\Router\Target;
use Nette\Application\UI\Form;
use Nette;

class SetPageForm extends Nette\Object
{

	/** @var PageManager */
	private $pageManager;

	/** @var Controls\SeoContainerFactory */
	private $seoContainerFactory;

	/** @var Page */
	private $page;



	public function __construct(PageFacade $pageManager, Controls\SeoContainerFactory $seoContainerFactory)
	{
		$this->pageManager = $pageManager;
		$this->seoContainerFactory = $seoContainerFactory;
	}



	public function setPage(Page $page)
	{
		$this->page = $page;
	}



	public function create()
	{
		$form = new Form();
		$form->addGroup($this->page ? "Edit page" : "Add page");
		$form->addText("name", "Name:");
		$form->addTextArea("content", "Content:");
		$seoGroup = $form->addGroup("SEO");
		$form['seoComponents'] = $this->seoContainerFactory->create($seoGroup);
		$form->addGroup();
		$form->addSubmit("send", $this->page ? "Edit page" : "Add page");

		$form->onSuccess[] = $this->processForm;
		if ($this->page) {
			$form->setDefaults(array(
				"name" => $this->page->name,
				"content" => $this->page->content,
			));
		}

		return $form;
	}



	public function processForm(Form $form)
	{
		$values = $form->values;
		$page = $this->page ? $this->page : new Page();
		$page->name = $values->name;
		$page->content = $values->content;
		$this->pageManager->save($page);

		/** @var Controls\SeoContainer $seoComponents */
		$seoComponents = $form['seoComponents'];
		$seoComponents->setTarget(new Target("Page", "show", $page->id));
		$seoComponents->saveChanges();
	}

}

组件

有一个组件 Brabijan\SeoComponents\Components\SetTarget。它用于设置所有应用程序目标的全局设置。您可以在管理中的任何地方使用它。

/** @var SetTargetFactory @inject */
public $setTargetFactory;



public function createComponentSetTarget()
{
	return $this->setTargetFactory->create();
}