mad-web/laravel-seoable

轻松地将eloquent字段映射到SEO属性

该软件包的官方仓库似乎已丢失,因此已冻结该软件包。

3.1.1 2020-11-18 17:23 UTC

This package is auto-updated.

Last update: 2024-04-19 00:47:24 UTC


README

Latest Version on Packagist Software License Build Status StyleCI Coverage Status Quality Score Total Downloads

此软件包提供以下功能:

  • 将Eloquent属性映射到SEO元标签
  • 在lang文件中设置和<description>的模板</li> <li>为应用中的任何模型保存自定义SEO数据</li> </ul> <p>与以下内容一起工作:</p> <ul> <li>元标签</li> <li>Open Graph</li> <li>Twitter Card</li> </ul> <p>基于<a href="https://github.com/artesaos/seotools" rel="nofollow noindex noopener external ugc">artesaos/seotools</a>的软件包,可在模板中设置元标签。</p> <h2 class="heading-element">Postcardware</h2><a id="user-content-postcardware" class="anchor" href="#user-content-postcardware" rel="nofollow noindex noopener external ugc"></a> <p>您可以使用此软件包(它<a href="https://github.com/mad-web/laravel-seoable/blob/HEAD/LICENSE.md" rel="nofollow noindex noopener external ugc">MIT授权</a>),但如果它进入了您的生产环境,我们非常感谢您从家乡寄给我们一张明信片,说明您正在使用我们的哪个软件包。</p> <h2 class="heading-element">安装</h2><a id="user-content-installation" class="anchor" href="#user-content-installation" rel="nofollow noindex noopener external ugc"></a> <p>您可以通过composer安装此软件包</p> <p><em><em>对于Laravel <= 5.4</em></em></p> <pre>composer require mad-web/laravel-seoable:1.0.0</pre> <p><em><em>对于Laravel 5.5</em></em></p> <pre>composer require mad-web/laravel-seoable</pre> <p><em><em>对于Laravel <= 5.4</em></em> - 现在在config/app.php文件中添加服务提供者</p> <pre><span class="pl-s">'providers'</span> => [ <span class="pl-c">// ...</span> <span class="pl-v">MadWeb</span>\<span class="pl-v">Seoable</span>\<span class="pl-v">SeoableServiceProvider</span>::class, ];</pre> <p>您可以使用以下命令发布迁移:</p> <pre>$ php artisan vendor:publish --provider=<span class="pl-s"><span class="pl-pds">"</span>MadWeb\Seoable\SeoableServiceProvider<span class="pl-pds">"</span></span> --tag=<span class="pl-s"><span class="pl-pds">"</span>migrations<span class="pl-pds">"</span></span></pre> <p>您可以使用以下命令发布配置文件:</p> <pre>$ php artisan vendor:publish --provider=<span class="pl-s"><span class="pl-pds">"</span>MadWeb\Seoable\SeoableServiceProvider<span class="pl-pds">"</span></span> --tag=<span class="pl-s"><span class="pl-pds">"</span>config<span class="pl-pds">"</span></span></pre> <p>这是发布的config/laravel-seoable.php配置文件的内容</p> <pre><span class="pl-k">return</span> [ <span class="pl-c">/*</span> <span class="pl-c"> |--------------------------------------------------------------------------</span> <span class="pl-c"> | Seo Data Table</span> <span class="pl-c"> |--------------------------------------------------------------------------</span> <span class="pl-c"> |</span> <span class="pl-c"> | You can customize seo data storing table for your models</span> <span class="pl-c"> */</span> <span class="pl-s">'seo_data_table'</span> => <span class="pl-s">'seo_data'</span>, <span class="pl-c">/*</span> <span class="pl-c"> |--------------------------------------------------------------------------</span> <span class="pl-c"> | Seo Data Templates Path</span> <span class="pl-c"> |--------------------------------------------------------------------------</span> <span class="pl-c"> |</span> <span class="pl-c"> | Path to lang file where you can set property template</span> <span class="pl-c"> |</span> <span class="pl-c"> | Supported properties: "title", "description"</span> <span class="pl-c"> */</span> <span class="pl-s">'templates_path'</span> => <span class="pl-s">'seoable::seo'</span>, <span class="pl-c">/*</span> <span class="pl-c"> |--------------------------------------------------------------------------</span> <span class="pl-c"> | Seo Data Model</span> <span class="pl-c"> |--------------------------------------------------------------------------</span> <span class="pl-c"> |</span> <span class="pl-c"> | Model name for seo data table</span> <span class="pl-c"> */</span> <span class="pl-s">'model'</span> => \<span class="pl-v">MadWeb</span>\<span class="pl-v">Seoable</span>\<span class="pl-v">Models</span>\<span class="pl-v">SeoData</span>::class ];</pre> <p>要设置<title>和<description>元标签的模板,您可以通过以下方式发布lang文件:</p> <pre>$ php artisan vendor:publish --provider=<span class="pl-s"><span class="pl-pds">"</span>MadWeb\Seoable\SeoableServiceProvider<span class="pl-pds">"</span></span> --tag=<span class="pl-s"><span class="pl-pds">"</span>lang<span class="pl-pds">"</span></span></pre> <p>或者在<code>templates_path</code>配置属性中设置自己的模板</p> <pre><span class="pl-c">/*</span> <span class="pl-c">|--------------------------------------------------------------------------</span> <span class="pl-c">| Seo Data Templates Path</span> <span class="pl-c">|--------------------------------------------------------------------------</span> <span class="pl-c">|</span> <span class="pl-c">| Path to lang file where you can set property template</span> <span class="pl-c">|</span> <span class="pl-c">| Supported properties: "title", "description"</span> <span class="pl-c">*/</span> <span class="pl-s">'templates_path'</span> => <span class="pl-s">'seoable::seo'</span>,</pre> <h2 class="heading-element">使用</h2><a id="user-content-usage" class="anchor" href="#user-content-usage" rel="nofollow noindex noopener external ugc"></a> <p>下一步,您需要通过实现接口、使用特性和实现<code>seoable()</code>方法来准备您的模型,如下所示</p> <pre><span class="pl-k">class</span> <span class="pl-v">User</span> <span class="pl-k">implements</span> <span class="pl-v">Seoable</span> { <span class="pl-k">use</span> <span class="pl-v">SeoableTrait</span>; ... <span class="pl-k">public</span> <span class="pl-k">function</span> <span class="pl-en">seoable</span>() { } }</pre> <h3 class="heading-element">标签设置</h3><a id="user-content-tags-setting" class="anchor" href="#user-content-tags-setting" rel="nofollow noindex noopener external ugc"></a> <p>使用<code>seo()</code>方法,并通过fluent API设置字段</p> <pre><span class="pl-k">public</span> <span class="pl-k">function</span> <span class="pl-en">seoable</span>() { <span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-><span class="pl-en">seo</span>() -><span class="pl-en">setTitle</span>(<span class="pl-s">'full_name'</span>) -><span class="pl-en">setDescription</span>(<span class="pl-s">'full_name'</span>); }</pre> <p>然后设置模板,如下例所示</p> <pre><span class="pl-k">return</span> [ \<span class="pl-v">App</span>\<span class="pl-v">User</span>::class => [ <span class="pl-s">'title'</span> => <span class="pl-s">'This is page title for user profile :full_name'</span>, <span class="pl-s">'description'</span> => <span class="pl-s">'This is page description for user profile :full_name'</span>, <span class="pl-s">'twitter_card'</span> => [ <span class="pl-s">'title'</span> => <span class="pl-s">'Page title for twitter card :full_name'</span>, <span class="pl-s">'description'</span> => <span class="pl-s">'Page description for twitter card :full_name'</span> ], <span class="pl-s">'open_graph'</span> => [ <span class="pl-s">'title'</span> => <span class="pl-s">'Page title for open graph :full_name'</span>, <span class="pl-s">'description'</span> => <span class="pl-s">'Page description for open graph :full_name'</span> ] ] ];</pre> <p>如果您没有声明它,将默认使用字段值</p> <p>您还可以通过在方法后添加Raw后缀来设置原始属性</p> <pre><span class="pl-k">public</span> <span class="pl-k">function</span> <span class="pl-en">seoable</span>() { <span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-><span class="pl-en">seo</span>() -><span class="pl-en">setTitleRaw</span>(<span class="pl-s">'Some awesome title'</span>) -><span class="pl-en">setDescriptionRaw</span>(<span class="pl-s">'Some awesome description'</span>); }</pre> <p>您可以通过放置关联数组来传递多个属性并设置自定义名称</p> <pre><span class="pl-k">public</span> <span class="pl-k">function</span> <span class="pl-en">seoable</span>() { <span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-><span class="pl-en">seo</span>() -><span class="pl-en">setTitle</span>([<span class="pl-s">'name'</span> => <span class="pl-s">'full_name'</span>, <span class="pl-s">'address'</span> => <span class="pl-s">'email'</span>]) -><span class="pl-en">setDescription</span>(<span class="pl-s">'full_name'</span>); }</pre> <p>您可以使用<code>seoData()</code>关系将附加到模型的SEO元标签保存</p> <pre><span class="pl-s1"><span class="pl-c1">$</span>user</span> = <span class="pl-v">User</span>::<span class="pl-en">find</span>(<span class="pl-c1">1</span>) <span class="pl-s1"><span class="pl-c1">$</span>user</span>-><span class="pl-c1">seoData</span>-><span class="pl-en">update</span>([<span class="pl-s">'meta'</span> => [<span class="pl-s">'title'</span> => <span class="pl-s">'some title'</span>]]);</pre> <p>存储的标签优先于在<code>seoable()</code>方法中设置的标签 *</p> <h3 class="heading-element">填充标签</h3><a id="user-content-filling-tags" class="anchor" href="#user-content-filling-tags" rel="nofollow noindex noopener external ugc"></a> <p>在您的控制器中,您可以像这样调用<code>seoable()</code>方法</p> <pre><span class="pl-k">public</span> <span class="pl-k">function</span> <span class="pl-en">show</span>(<span class="pl-s1"><span class="pl-c1">$</span>post</span>) { <span class="pl-s1"><span class="pl-c1">$</span>post</span>-><span class="pl-en">seoable</span>() .<span class="pl-c1">.</span>. }</pre> <p>如果您想覆盖一些元标签</p> <pre><span class="pl-k">public</span> <span class="pl-k">function</span> <span class="pl-en">show</span>(<span class="pl-s1"><span class="pl-c1">$</span>post</span>) { <span class="pl-s1"><span class="pl-c1">$</span>post</span>-><span class="pl-en">seoable</span>()-><span class="pl-en">meta</span>() -><span class="pl-en">setTitleRaw</span>(<span class="pl-s">'Some Post Title'</span>); <span class="pl-c1">.</span>.<span class="pl-c1">.</span> }</pre> <p>如果您需要忽略模型在数据库中存储的标签</p> <pre><span class="pl-k">public</span> <span class="pl-k">function</span> <span class="pl-en">show</span>(<span class="pl-s1"><span class="pl-c1">$</span>post</span>) { <span class="pl-s1"><span class="pl-c1">$</span>post</span>-><span class="pl-en">seoable</span>()-><span class="pl-en">meta</span>()-><span class="pl-en">ignoreStored</span>() -><span class="pl-en">setTitleRaw</span>(<span class="pl-s">'Some Post Title'</span>); <span class="pl-c1">.</span>.<span class="pl-c1">.</span> }</pre> <h3 class="heading-element">标签生成</h3><a id="user-content-tags-generating" class="anchor" href="#user-content-tags-generating" rel="nofollow noindex noopener external ugc"></a> <p>将以下行放入<code><head></code>标签内</p> <pre><span class="pl-kos"><</span><span class="pl-ent">head</span><span class="pl-kos">></span> ... {!! resolve('seotools')-<span class="pl-kos">></span>generate() !!} ... <span class="pl-kos"></</span><span class="pl-ent">head</span><span class="pl-kos">></span></pre> <p>或者您可以将Facade添加到<code>app.php</code>配置中</p> <pre><span class="pl-s">'aliases'</span> => [ <span class="pl-c">// other Facades ommited</span> <span class="pl-s">'SEO'</span> => <span class="pl-v">Artesaos</span>\<span class="pl-v">SEOTools</span>\<span class="pl-v">Facades</span>\<span class="pl-v">SEOTools</span>::class, ]</pre> <p>并使用它而不是<code>resolve('seotools')</code></p> <pre><span class="pl-kos"><</span><span class="pl-ent">head</span><span class="pl-kos">></span> ... {!! SEO::generate() !!} ... <span class="pl-kos"></</span><span class="pl-ent">head</span><span class="pl-kos">></span></pre> <p>要设置默认元标签值,只需发布SEOTools配置</p> <pre>php artisan vendor:publish --provider="<span class="pl-s">Artesaos\SEOTools\Providers\SEOToolsServiceProvider</span>"</pre> <p>您可以在<a href="https://github.com/spatie/laravel-permission/blob/master/README.md" rel="nofollow noindex noopener external ugc">SEOTools Readme</a>上找到完整的用法文档</p> <h4 class="heading-element">完整的fluent API</h4><a id="user-content-full-fluent-api" class="anchor" href="#user-content-full-fluent-api" rel="nofollow noindex noopener external ugc"></a> <pre><span class="pl-k">public</span> <span class="pl-k">function</span> <span class="pl-en">seoable</span>() { <span class="pl-k">return</span> <span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-><span class="pl-en">seo</span>() -><span class="pl-en">setTitle</span>([<span class="pl-s">'name'</span>, <span class="pl-s">'email'</span>]) -><span class="pl-en">setDescription</span>(<span class="pl-s">'name'</span>) -><span class="pl-en">setCanonical</span>(<span class="pl-s">'url'</span>) -><span class="pl-en">setPrev</span>(<span class="pl-s">'link'</span>) -><span class="pl-en">setNext</span>(<span class="pl-s">'link'</span>) -><span class="pl-en">setKeywords</span>(<span class="pl-s">'keywords'</span>) -><span class="pl-en">setLanguages</span>([ [ <span class="pl-s">'lang'</span> => <span class="pl-s">'ru'</span>, <span class="pl-s">'url'</span> => <span class="pl-s">'lang_url'</span> <span class="pl-c">// Resolving by model attribute</span> ] ]) -><span class="pl-en">addLanguage</span>(<span class="pl-s">'en'</span>, <span class="pl-s">'lang_url'</span>) -><span class="pl-en">addMeta</span>(<span class="pl-s">'foo'</span>, <span class="pl-s">'bar'</span>) -><span class="pl-en">setMeta</span>([ [ <span class="pl-s">'meta'</span> => <span class="pl-s">'some'</span>, <span class="pl-s">'value'</span> => <span class="pl-s">'name'</span> ], [ <span class="pl-s">'meta'</span> => <span class="pl-s">'another'</span>, <span class="pl-s">'value'</span> => <span class="pl-s">'tag'</span> ] ]) -><span class="pl-en">twitter</span>() -><span class="pl-en">setTitle</span>(<span class="pl-s">'name'</span>) -><span class="pl-en">setDescription</span>(<span class="pl-s">'name'</span>) -><span class="pl-en">setUrl</span>(<span class="pl-s">'url'</span>) -><span class="pl-en">setSite</span>(<span class="pl-s">'site_name'</span>) -><span class="pl-en">setType</span>(<span class="pl-s">'type'</span>) -><span class="pl-en">setImages</span>([<span class="pl-s">'avatar'</span>, <span class="pl-s">'image'</span>]) -><span class="pl-en">addValue</span>(<span class="pl-s">'foo'</span>, [<span class="pl-s">'name'</span>, <span class="pl-s">'name'</span>]) -><span class="pl-en">setValues</span>([ [ <span class="pl-s">'key'</span> => <span class="pl-s">'foo'</span>, <span class="pl-s">'value'</span> => <span class="pl-s">'attribute'</span> ], [ <span class="pl-s">'key'</span> => <span class="pl-s">'another'</span>, <span class="pl-s">'value'</span> => <span class="pl-s">'another_attribute'</span> ] ]) -><span class="pl-en">opengraph</span>() -><span class="pl-en">setTitle</span>(<span class="pl-s">'name'</span>) -><span class="pl-en">setDescription</span>([<span class="pl-s">'name'</span>, <span class="pl-s">'email'</span>]) -><span class="pl-en">setUrl</span>(<span class="pl-s">'url'</span>) -><span class="pl-en">setSiteName</span>(<span class="pl-s">'site_name'</span>) -><span class="pl-en">setImages</span>([<span class="pl-s">'avatar'</span>, <span class="pl-s">'image'</span>]) -><span class="pl-en">setProperties</span>([ [ <span class="pl-s">'key'</span> => <span class="pl-s">'foo'</span>, <span class="pl-s">'value'</span> => <span class="pl-s">'attribute'</span> ], [ <span class="pl-s">'key'</span> => <span class="pl-s">'another'</span>, <span class="pl-s">'value'</span> => <span class="pl-s">'another_attribute'</span> ] ]) -><span class="pl-en">addProperty</span>(<span class="pl-s">'foo'</span>, [<span class="pl-s">'name'</span>, <span class="pl-s">'email'</span>]); }</pre> <h2 class="heading-element">更新日志</h2><a id="user-content-changelog" class="anchor" href="#user-content-changelog" rel="nofollow noindex noopener external ugc"></a> <p>请参阅<a href="https://github.com/mad-web/laravel-seoable/blob/HEAD/CHANGELOG.md" rel="nofollow noindex noopener external ugc">CHANGELOG</a>以获取有关最近更改的更多信息</p> <h2 class="heading-element">测试</h2><a id="user-content-testing" class="anchor" href="#user-content-testing" rel="nofollow noindex noopener external ugc"></a> <pre>$ composer <span class="pl-c1">test</span></pre> <h2 class="heading-element">贡献</h2><a id="user-content-contributing" class="anchor" href="#user-content-contributing" rel="nofollow noindex noopener external ugc"></a> <p>请参阅<a href="https://github.com/mad-web/laravel-seoable/blob/HEAD/CONTRIBUTING.md" rel="nofollow noindex noopener external ugc">CONTRIBUTING</a>和<a href="https://github.com/mad-web/laravel-seoable/blob/HEAD/CONDUCT.md" rel="nofollow noindex noopener external ugc">CONDUCT</a>以获取详细信息。</p> <h2 class="heading-element">安全</h2><a id="user-content-security" class="anchor" href="#user-content-security" rel="nofollow noindex noopener external ugc"></a> <p>如果您发现任何与安全相关的问题,请通过电子邮件<a href="mailto:madweb.dev@gmail.com" rel="nofollow noindex noopener external ugc">madweb.dev@gmail.com</a>而不是使用问题跟踪器。</p> <h2 class="heading-element">致谢</h2><a id="user-content-credits" class="anchor" href="#user-content-credits" rel="nofollow noindex noopener external ugc"></a> <ul> <li><a href="https://github.com/mad-web" rel="nofollow noindex noopener external ugc">Mad Web</a></li> <li><a href="https://github.com/mad-web/laravel-seoable/blob/HEAD/../../contributors" rel="nofollow noindex noopener external ugc">所有贡献者</a></li> </ul> <h2 class="heading-element">许可证</h2><a id="user-content-license" class="anchor" href="#user-content-license" rel="nofollow noindex noopener external ugc"></a> <p>MIT许可证。请参阅<a href="https://github.com/mad-web/laravel-seoable/blob/HEAD/LICENSE.md" rel="nofollow noindex noopener external ugc">许可证文件</a>获取更多信息。</p> </div> </div> </div> </section> </section> </section> <footer class="wrapper-footer"> <nav class="container"> <div class="row"> <ul class="social col-xs-7 col-sm-4 col-md-2 pull-right"> <li><a href="http://github.com/composer/packagist" title="GitHub"><span class="icon-github"></span></a></li> <li><a href="https://twitter.com/packagist" title="Follow @packagist"><span class="icon-twitter"></span></a></li> <li><a href="mailto:contact@packagist.org" title="Contact"><span class="icon-mail"></span></a></li> </ul> <ul class="col-xs-4 col-sm-4 col-md-2"> <li><a href="/about">About Packagist</a></li> <li><a href="/feeds/" rel="nofollow">Atom/RSS Feeds</a></li> </ul> <div class="clearfix visible-xs-block"></div> <ul class="col-xs-3 col-sm-4 col-md-2"> <li><a href="/statistics" rel="nofollow">Statistics</a></li> <li><a href="/explore/">Browse Packages</a></li> </ul> <div class="clearfix visible-xs-block visible-sm-block"></div> <ul class="col-xs-3 col-sm-4 col-md-2"> <li><a href="/apidoc">API</a></li> <li><a href="/mirrors">Mirrors</a></li> </ul> <div class="clearfix visible-xs-block"></div> <ul class="col-xs-3 col-sm-4 col-md-2"> <li><a href="https://status.packagist.org/">Status</a></li> <li><a href="https://p.datadoghq.com/sb/x98w56x71erzshui-4a54c45f82bacc991e83302548934b6a">Dashboard</a></li> </ul> </div> <div class="row sponsor"> <p class="col-xs-12">Packagist maintenance and hosting provided by <a href="https://packagist.com/"><img alt="Private Packagist" src="/img/private-packagist.svg?v=1726064759"></a></p> </div> <div class="row sponsor"> <p class="col-xs-12">Monitoring provided by <a href="https://datadog.com/"><img alt="Datadog" src="/img/datadog-light.png?v=1726064759"></a></p> </div> </nav> </footer> <script nonce="wT/ieUmpI1QLBmE7J8zqKQ=="> var algoliaConfig = {"app_id":"M58222SH95","search_key":"5ae4d03c98685bd7364c2e0fd819af05","index_name":"packagist"}; window.process = { env: { DEBUG: undefined }, }; </script> <script nonce="wT/ieUmpI1QLBmE7J8zqKQ==" src="/build/app.js?v=1726064759"></script> </body></html>