imarc/craft-googlecustomsearch

一个用于与谷歌自定义搜索(和谷歌网站搜索)集成的Craft插件。

2.2.0 2024-08-27 20:38 UTC

README

一个将谷歌自定义搜索整合到您的网站中的Craft CMS插件。

谷歌提供免费付费等级,以访问其搜索结果。

如果您正在寻找此插件的Craft 2版本,请查看craft2分支。

要求

此插件需要Craft CMS 3.0.0或更高版本。

安装

要安装插件,请按照以下说明操作。

  1. 打开您的终端并转到您的Craft项目

     cd /path/to/project
    
  2. 然后让Composer加载插件

     composer require imarc/craft-googlecustomsearch
    
  3. 在控制面板中,转到设置 → 插件,然后单击googlecustomsearch的“安装”按钮。

配置

您需要从谷歌获取一个 搜索引擎IDAPI密钥

搜索引擎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提供