gmasson/json-search-php

一个用于方便在 JSON 文件中显示、搜索和分页存储数据的 PHP 类。

dev-main 2024-05-01 05:10 UTC

This package is auto-updated.

Last update: 2024-10-01 00:09:00 UTC


README

JSON Search PHP 是一个旨在简化在 JSON 文件中显示、搜索和分页存储数据的 PHP 类。它是一个用于安全高效地执行 JSON 文件数据搜索的有用工具。使用此类,可以定义要使用的 JSON 数据,配置每页的项目数量,指定搜索字段,并以分页方式呈现结果。

可用方法

  • setJsonData($jsonFile): 定义要使用的 JSON 数据。
  • setCacheDuration($cacheDuration): 定义缓存持续时间(以秒为单位,可选,默认为 1800 秒,即 30 分钟)。
  • setItemsPerPage($itemsPerPage): 定义分页的每页项目数量。
  • setSearchFields($searchFields): 定义用于搜索的 JSON 记录字段。
  • renderResults($searchTerm, $page, $template, $noResultsMessage): 在页面上呈现结果。
  • renderPagination($searchTerm, $paginationClass, $hideIfSinglePage): 在页面上呈现分页。
  • renderSearchForm($searchTerm): 在页面上呈现搜索表单。

如何使用

1. 实例化类

// Cria uma instância da classe JsonSearchPHP
$jsonSearchPHP = new JsonSearchPHP();

2. 定义缓存持续时间(可选)

如果您的服务器允许使用 sys_get_temp_dir 函数来访问临时文件,则该类将为您创建一个缓存文件以加速数据查询。

如果需要,您可以定义一个比默认 30 分钟(1800 秒)更长或更短的缓存持续时间。

// Define tempo de duração do cache em 1 hora
$jsonSearchPHP->setCacheDuration(3600);

3. 定义 JSON 数据

在使用类之前,您需要定义要使用的 JSON 文件。这可以通过使用 setJsonData() 方法并传递 JSON 文件的路径作为参数来完成。

$jsonSearchPHP->setJsonData('caminho/para/dados.json');

4. 配置分页

您可以使用 setItemsPerPage() 方法定义每页的项目数量。

$jsonSearchPHP->setItemsPerPage(10); // Define 10 itens por página

5. 指定搜索字段

需要定义用于搜索的 JSON 记录字段。这可以通过将包含字段名称的数组作为参数传递给 setSearchFields() 方法来完成。

$jsonSearchPHP->setSearchFields(['nome', 'categorias']); // Define os campos 'nome' e 'categorias'

6. 呈现结果和分页

要呈现结果和分页,请使用 renderResults()renderPagination() 方法。

$page = isset($_GET['page']) ? $_GET['page'] : 1; // Obtém a página atual da URL
$searchTerm = isset($_GET['search']) ? $_GET['search'] : ''; // Obtém o termo de pesquisa da URL

// Define o template HTML com marcadores [nomevariavel]
$template = "
<div>
    <p><strong>ID:</strong> [id]</p>
    <p><strong>Nome:</strong> [nome]</p>
    <p><strong>Descrição:</strong> [descricao]</p>
    <p><strong>Preço:</strong> [preco]</p>
</div>
<hr>
";

// Renderiza os resultados utilizando o template HTML
$jsonSearchPHP->renderResults($searchTerm, $page, $template);

// Renderiza a paginação
$jsonSearchPHP->renderPagination($searchTerm);

JSON Search PHP 通过允许您在渲染结果时直接定义 JSON 变量来提供灵活性。这意味着您可以直接控制要显示在用户界面上的特定 JSON 字段,而无需更改数据结构或修改类的内部逻辑。

这种灵活性是通过使用带有占位符的 HTML 模板实现的,其中每个占位符都对应一个 JSON 变量。例如,假设您在 JSON 数据中有一个名为 "nome" 的字段,并希望将其显示在界面中。您可以在您的 HTML 模板中定义一个 [nome] 占位符,函数将在渲染过程中将占位符替换为对应的 "nome" 字段值。

要搜索的 JSON 示例

[
    {
        "id": 1,
        "nome": "Produto 1",
        "descricao": "Descrição do Produto 1",
        "preco": 10.99,
        "categorias": ["Eletrônicos", "Celulares"]
    },
    {
        "id": 2,
        "nome": "Produto 2",
        "descricao": "Descrição do Produto 2",
        "preco": 24.99,
        "categorias": ["Moda", "Roupas"]
    },
    {
        "id": 3,
        "nome": "Produto 3",
        "descricao": "Descrição do Produto 3",
        "preco": 39.99,
        "categorias": ["Livros", "Ficção"]
    }
]

以下是一个带有占位符的 HTML 模板示例

<div>
    <p><strong>ID:</strong> [id]</p>
    <p><strong>Nome:</strong> [nome]</p>
    <p><strong>Descrição:</strong> [descricao]</p>
    <p><strong>Preço:</strong> [preco]</p>
</div>
<hr>

在这个例子中,[id][nome][descricao][preco] 是将在渲染过程中被相应记录的 JSON 值所替换的标记。

使用 renderResults() 方法时,您需要将此 HTML 模板以及搜索数据、当前页面和搜索词作为参数传入。然后类将替换标记与相应的 JSON 值,并根据提供的模板渲染结果。

7. 渲染搜索表单(可选)

如果您想在页面上包含搜索表单,可以使用可选的 renderSearchForm() 方法。

// Renderiza o formulário de busca com o termo atual preenchido
$jsonSearchPHP->renderSearchForm($searchTerm);

或者创建自己的搜索表单,将输入名称设置为 search 或您用于 searchTerm 的名称

使用示例

完整的类使用示例在 PHP 代码中提供。

<?php
// Exemplo de uso:

require "JsonSearchPHP.php";

// Cria uma instância da classe JsonSearchPHP
$jsonSearchPHP = new JsonSearchPHP();

// Define os dados JSON a serem utilizados
$jsonSearchPHP->setJsonData('dados.json');

// Define o número de itens por página para a paginação
$jsonSearchPHP->setItemsPerPage(3);

// Define os campos do registro JSON que serão utilizados para a busca
$jsonSearchPHP->setSearchFields(['nome', 'categorias']);

// Obtém a página atual da URL
$page = isset($_GET['page']) ? $_GET['page'] : 1;

// Obtém o termo de pesquisa da URL
$searchTerm = isset($_GET['search']) ? $_GET['search'] : '';

// Define o template HTML com marcadores [nomevariavel]
$template = "
<div>
    <p><strong>ID:</strong> [id]</p>
    <p><strong>Nome:</strong> [nome]</p>
    <p><strong>Descrição:</strong> [descricao]</p>
    <p><strong>Preço:</strong> [preco]</p>
</div>
<hr>
";

// Renderiza o formulário de busca (opcional)
$jsonSearchPHP->renderSearchForm($searchTerm);

// Renderiza os resultados utilizando o template HTML
$jsonSearchPHP->renderResults($searchTerm, $page, $template);

// Renderiza a paginação
$jsonSearchPHP->renderPagination($searchTerm);

上面的例子没有进行清理,尽管类默认有一些内部清理,但建议您始终对数据输入进行清理,如 $_get[],以避免在您的生产应用中发生如 XSS(跨站脚本)等攻击,在上面的例子中,对 $page$searchTerm 进行清理。

许可证

本项目根据 MIT 许可证条款授权。