imarc / craft-googlecustomsearch
一个用于与谷歌自定义搜索(和谷歌网站搜索)集成的Craft插件。
2.2.0
2024-08-27 20:38 UTC
Requires
- php: ^8.0
- craftcms/cms: ^3.0.0 || ^4.0.0 || ^5.0.0
Requires (Dev)
- craftcms/rector: dev-main
This package is auto-updated.
Last update: 2024-08-27 20:38:57 UTC
README
一个将谷歌自定义搜索整合到您的网站中的Craft CMS插件。
如果您正在寻找此插件的Craft 2版本,请查看craft2
分支。
要求
此插件需要Craft CMS 3.0.0或更高版本。
安装
要安装插件,请按照以下说明操作。
-
打开您的终端并转到您的Craft项目
cd /path/to/project
-
然后让Composer加载插件
composer require imarc/craft-googlecustomsearch
-
在控制面板中,转到设置 → 插件,然后单击googlecustomsearch的“安装”按钮。
配置
您需要从谷歌获取一个 搜索引擎ID 和 API密钥。
搜索引擎ID - 在自定义搜索引擎控制面板上,为要集成的网站创建一个新的搜索引擎。创建后,您可以从设置标签中检索搜索引擎ID。
API密钥 - 如果您使用的是免费层,请访问谷歌开发者控制台并为您搜索引擎创建一个项目。在您的项目中,您需要从APIs标签中启用自定义搜索API。最后,在Credentials标签中,您需要通过选择创建新密钥选项并选择服务器密钥来创建公共API访问密钥。现在API密钥将可用。如果您使用的是付费层,您可以在控制面板的商业 > XML & JSON标签中找到您的API密钥。
凭据可以从Craft的插件设置或config/googlecustomsearch.php
中添加。
<?php
return [
"apiKey" => getenv('GOOGLE_SEARCH_API_KEY'),
"searchEngineId" => getenv('GOOGLE_SEARCH_ENGINE_ID'),
];
用法
在您的twig模板中,通过传递您的搜索查询从谷歌检索搜索结果,然后迭代以显示
{% set response = craft.googlecustomsearch.performSearch('google') %}
以下是一个带有分页的完整示例
{% extends "_layout" %}
{% set query = craft.request.getParam('q') %}
{% set page = craft.request.getParam('page') ?: '1' %}
{% set title = "Search" %}
{% if query %}
{% set response = craft.googlecustomsearch.performSearch(query, page) %}
{% set title = query ~ " - Search" %}
{% set totalPages = ceil(response.totalResults / response.perPage) %}
{% endif %}
{% block content %}
<div class="main">
<h1>Search</h1>
<form class="search">
<div class="text">
<input type="search" name="q" placeholder="Search" value="{{ query }}">
</div>
<div class="submit">
<input type="submit" value="Search">
</div>
</form>
{% if query %}
{% if response.results | length %}
<div class="intro">
<p>
Showing {{ response.start }}–{{ response.end }} of {{ response.totalResults }} results for <strong>{{ query }}</strong>
</p>
</div>
<ul class="listing">
{% for result in response.results %}
<li>
<h3>
<a href="{{ result.link }}">
{{ result.title | raw }}
</a>
</h3>
{% if result.thumbnail | length %}
<img src="{{ result.thumbnail }}" width="80" style="float: left; margin: 0 1em 1em 0" />
{% endif %}
<a class="url" href="{{ result.link }}">{{ result.link }}</a>
<p class="summary">
{{ result.htmlSnippet | raw }}
</p>
</li>
{% endfor %}
</ul>
{% if totalPages > 1 %}
<div class="meta paginator">
{% if page > 1 %}
<a href="{{ url('search', {q:query, page:(page-1)}) }}" class="prev"></i>Previous</a>
{% endif %}
{% if page < totalPages %}
<a href="{{ url('search', {q:query, page:(page+1)}) }}" class="next">Next</a>
{% endif %}
</div>
{% endif %}
{% else %}
<div class="info">
<p>
Your search for “{{ query }}” didn’t return any results.
</p>
</div>
{% endif %}
{% endif %}
</div>
{% endblock %}
鸣谢
由Imarc提供