brabijan / nette-seo-components
Nette 框架的 SEO 组件
Requires
- kdyby/doctrine: @dev
- nette/nette: >= 2.2.0
Requires (Dev)
- nette/tester: ~1.0
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(); }