gmasson / json-search-php
一个用于方便在 JSON 文件中显示、搜索和分页存储数据的 PHP 类。
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 许可证条款授权。