Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde,
Sou iniciante no php e preciso de uma ajuda.
A situação é a seguinte:
Tenho um diretório de fotos (miniaturas) onde estarao todas as fotos dos produtos do site, o nome de cada uma é padrão ( mini-ref[n° ref]-[N° dela].jpg ). Elas aparecerão na pg de detalhes de cada produto.
Gostaria de saber como faço para consultar o diretório e retornar só as que tiverem o número de referência do produto.
Exemplo:
Fiz a busca pelo produto ref.: 25 e quero que retorne todas as fotos com essa referência .... mini-ref25-1.jpg, mini-ref25-2.jpg, mini-ref25-3.jpg ....... mini-ref25-n.jpg
Com o código abaixo consigo listar os arquivos do diretório "thumbs":
$dir = "fotos/thumbs/";
$manipulador = opendir($dir);
while (($file = readdir($manipulador))!== false){
echo "$file <br />";
}
Porém não sei como retornar só com determinada referência.Interessante .. obrigada pela resposta quelipe, como disse, sou iniciante ... vou dar uma estudada (tentar entender) na sua solução.
Pq minha dúvida não é somente qt a linguagem, mas tb qt a lógica (acho q mto mais disso) .... o "como fazer", se você tem uma idéia da lógica a seguir, já tem algo para pesquisar.
Obrigada
A SPL oferece, entre vários iteratores, um específico que lhe ajudará muito nessa situação, veja esse link http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://forum.imasters.com.br/index.php?/topic/394321-1-6-spl-filteriterator/
Com a FilterIterator, você é capaz de definir o padrão que deseja para um outro iterator, nesse caso, o outro iterator seria o GlobIterator http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://forum.imasters.com.br/index.php?/topic/394641-1-8-spl-globiterator/
Bom, primeiro você vai precisar de um filtro:
PatternFilterIterator.php
<?php
class PatternFilterIterator extends FilterIterator {
private $pattern;
public function __construct( $pattern , Iterator $iterator ){
parent::__construct( $iterator );
$this->pattern = $pattern;
}
public function accept(){
return (bool) preg_match( $this->pattern , $this->getInnerIterator()->current() );
}
}
Usando isso ai em conjunto do GlobIterator:
<?php
require 'PatternFilterIterator.php';
$referencia = 25;
foreach ( new PatternFilterIterator( sprintf( '/mini-ref%d-[^\.]+/i' , $referencia ) , new GlobIterator( 'public/images/*.jpg' ) ) as $item ){
echo '<img src="' , $item->getPathName() , '" />';
}
Bom, seria mais fácil você ter uma pasta para cada referência, mas você dever ter seus motivos.
Vamos lá:
Pelo que entendi você retorna o numero de referência do DB então você deve armazenar esse valor em uma variável:
....consulta do banco....
$ref = //resultado da consulta suponhamos que seja 25;
Como você falou o nome é padrão então faremos o seguinte:
$padrao = "mini-ref";
Para ficar mais fácil o entendimento vamos concatenar as variáveis:
$busca = $padrao.$ref;
Agora vamos mostrar os arquivos:
while (($file = readdir($manipulador))!== false){ if(strpos($file, $busca) !== false) {AT+