# DF Recently Viewed: produtos vistos recentemente (PrestaShop 8/9)

> Apresentação O DF Recently Viewed (dfrecentlyviewed) mostra os produtos vistos recentemente pelos seus visitantes, mas com uma arquitetura pensada para a conversão: o histórico é guardado do lado do servidor,…

- Página: <https://www.datafirefly.com/pt/documentation/dfrecentlyviewed/>
- Idioma: pt
- Atualizado em: 2026-09-02
- Outros idiomas: [fr](https://www.datafirefly.com/documentation/dfrecentlyviewed/index.md), [en](https://www.datafirefly.com/en/documentation/dfrecentlyviewed/index.md), [es](https://www.datafirefly.com/es/documentation/dfrecentlyviewed/index.md), [de](https://www.datafirefly.com/de/documentation/dfrecentlyviewed/index.md), [it](https://www.datafirefly.com/it/documentation/dfrecentlyviewed/index.md), [pl](https://www.datafirefly.com/pl/documentation/dfrecentlyviewed/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfrecentlyviewed/index.md)
- Índice: <https://www.datafirefly.com/pt/documentation/llms.txt>

## Apresentação

O DF Recently Viewed (`dfrecentlyviewed`) mostra os produtos vistos recentemente pelos seus visitantes, mas com uma arquitetura pensada para a conversão: o histórico é guardado do lado do servidor, fundido na conta do cliente no início de sessão, renderizado em AJAX para se manter exato atrás de uma cache de página, e enriquecido com badges de descida de preço. Um painel analítico completa o conjunto com uma taxa de conversão de visualização para compra.

### Pré-requisitos

- PrestaShop 8.0 a 9.x
- PHP 7.4 a 8.3
- Nenhuma dependência externa (nem Composer, nem jQuery, nem biblioteca de carrossel)

## Instalação

1. No back-office, abra **Módulos > Gestor de módulos**.
2. Clique em **Instalar um módulo** e carregue o ficheiro `dfrecentlyviewed.zip`.
3. Clique em **Instalar**. O módulo cria a sua tabela, regista os seus hooks e acrescenta um separador **Catálogo > Estatísticas de produtos vistos**.
4. Clique em **Configurar** para aceder às definições.

O módulo funciona desde a instalação com definições por defeito sensatas: 8 produtos, carrossel, renderização AJAX, badges de descida de preço ativados, retenção de 90 dias.

## Configuração

### Separador Apresentação

- **Título do bloco**: traduzível em cada um dos seus idiomas.
- **Número de produtos**: de 1 a 24 produtos apresentados no bloco.
- **Disposição em carrossel**: ativado, carrossel horizontal com setas de navegação; desativado, grelha responsiva.
- **Mostrar nas fichas de produto**: hook `displayFooterProduct`.
- **Mostrar na página inicial**: hook `displayHome`.
- **Mostrar na página do carrinho**: hook `displayShoppingCartFooter`.
- **Mostrar a ligação « limpar o meu histórico »**: recomendado para a transparência RGPD.

### Separador Comportamento inteligente

- **Excluir o produto atualmente apresentado**: evita recomendar a ficha já no ecrã.
- **Ocultar os produtos esgotados**: o filtro tem em conta as pré-encomendas autorizadas.
- **Ocultar os produtos já no carrinho**: o carrinho é recalculado do lado do servidor, nunca a partir da página em cache.
- **Badges de descida de preço**: mostra um badge « -X % » quando o preço baixou desde a última consulta do visitante.
- **Renderização AJAX (compatível com cache)**: vivamente recomendada, ver a secção dedicada mais abaixo.
- **Retenção do histórico (dias)**: de 1 a 730 dias. As visualizações mais antigas são purgadas automaticamente.

## Compatibilidade com o full page cache

Numa loja equipada com Varnish, Cloudflare, LiteSpeed Cache ou um CDN, um bloco personalizado renderizado do lado do servidor é guardado em cache com a página: o visitante seguinte vê o histórico de outra pessoa, ou um bloco vazio.

O modo **Renderização AJAX**, ativado por defeito, resolve este problema: o bloco é injetado depois da renderização da página, através de um pedido ao controlador front do módulo. O registo da visualização do produto parte, por sua vez, em _beacon_ não bloqueante, que funciona igualmente quando a página vem da cache.

Só desative o modo AJAX se a sua loja não usar nenhuma cache de página. Caso contrário, o bloco mostrará dados incorretos.

## Badges de descida de preço

A cada consulta de uma ficha de produto, o módulo regista o preço com IVA apresentado nesse momento para esse visitante preciso. Na apresentação do bloco, compara esse preço memorizado com o preço atual:

- Se o preço tiver baixado pelo menos 1 %, um badge vermelho « ↓ -X % » aparece no canto superior esquerdo da miniatura.
- O preço memorizado é atualizado a cada nova consulta: o badge significa portanto sempre « o preço baixou desde a sua última visita a esta ficha ».
- Se o preço subir, o badge desaparece.

## Histórico entre dispositivos

As visualizações são registadas com o identificador de convidado (`id_guest`) para os visitantes anónimos, e com o identificador de cliente (`id_customer`) para os visitantes autenticados.

No momento do início de sessão (hook `actionAuthentication`), o histórico de convidado é fundido na conta do cliente: os contadores de visualizações são somados e é conservada a data de última consulta mais recente. O cliente reencontra assim os seus produtos consultados em todos os seus dispositivos.

## Página « O meu histórico de navegação »

O módulo acrescenta um mosaico na área de cliente (hook `displayCustomerAccount`) que leva a uma página dedicada com até 48 produtos consultados, com um botão de limpeza se a opção estiver ativada.

URL da página: `/module/dfrecentlyviewed/history` (reescrito consoante a sua configuração de URLs).

## Widget

O bloco pode ser chamado a partir de qualquer template do seu tema:

```
{widget name='dfrecentlyviewed'}
{widget name='dfrecentlyviewed' limit=6}
```

O parâmetro `limit` é facultativo e limitado a 24; sem ele, aplica-se o número configurado no back-office.

## Painel analítico

Vá a **Catálogo > Estatísticas de produtos vistos**. Encontra aí, num período de 7, 30, 90 ou 365 dias:

- **Visualizações de produtos**: número total de consultas registadas.
- **Produtos distintos consultados**: extensão real da descoberta do catálogo.
- **Visitantes únicos**: convidados e clientes em conjunto.
- **Conversão de visualização para compra**: percentagem de pares cliente/produto consultados que deram origem a uma encomenda válida posterior à consulta. Calculada apenas nos clientes autenticados.
- **Produtos mais consultados**: classificação com ligação direta para a ficha de produto no back-office.

## RGPD e retenção

### Hooks psgdpr

O módulo implementa `actionExportGDPRData` e `actionDeleteGDPRCustomer`: se o módulo oficial psgdpr estiver instalado, o histórico de navegação é incluído nas exportações e nas eliminações de dados pessoais pedidas pelos seus clientes.

### Limpeza em autosserviço

Quando a opção está ativada, uma ligação « Limpar o meu histórico » aparece ao lado do título do bloco e na página de histórico. O visitante pode eliminar ele próprio os seus dados, com confirmação.

### Purga automática

As visualizações mais antigas do que a duração de retenção configurada são purgadas automaticamente, de forma oportunista (em cerca de 1 % das visualizações registadas). Não é necessária nenhuma configuração.

### CRON facultativo

Para as lojas com muito tráfego, um URL de purga protegido por token é apresentado na página de configuração. Pode chamá-lo diariamente:

```
0 4 * * * curl -s "https://a-sua-loja.pt/module/dfrecentlyviewed/tracking?action=cleanup&token=O_SEU_TOKEN"
```

## Integração no tema

Os produtos são renderizados através da miniatura nativa do seu tema (`catalog/_partials/miniatures/product.tpl`). O bloco herda portanto automaticamente o design das suas listagens: imagem, nome, preço, badges de promoção, botão de adição rápida se o seu tema o propuser.

Se quiser personalizar o contentor, sobreponha os templates do módulo a partir do seu tema:

```
themes/o-seu-tema/modules/dfrecentlyviewed/views/templates/hook/recentlyviewed.tpl
themes/o-seu-tema/modules/dfrecentlyviewed/views/templates/hook/_products.tpl
```

## Multiloja

Os históricos são separados por loja: um visitante que consulte um produto na loja A não o verá aparecer na loja B. Todas as definições são guardadas através da tabela Configuration do PrestaShop, com suporte multiloja nativo.

## Desinstalação

A desinstalação elimina a tabela de histórico, o conjunto das definições e o separador de estatísticas. É pedida uma confirmação antes da operação.

## Resolução de problemas

### O bloco não aparece

- Verifique que o hook correspondente à página está ativado na configuração (ficha de produto, página inicial, carrinho).
- O bloco só é apresentado se o visitante tiver consultado pelo menos um produto elegível. Um visitante que chegue pela primeira vez à loja não verá nada.
- Se a exclusão do produto atual e a exclusão do carrinho estiverem ambas ativas, é possível que não reste nenhum produto para mostrar.

### O bloco fica vazio numa página em cache

Certifique-se de que o modo **Renderização AJAX** está ativado. Verifique também que a sua configuração de cache não interceta os pedidos para `/module/dfrecentlyviewed/tracking`.

### Os badges de descida de preço nunca aparecem

O badge só pode aparecer se o visitante tiver consultado o produto _antes_ da descida de preço. Depois de uma alteração de tarifa, dê tempo aos visitantes para voltarem. Verifique também que a opção está ativada.
