Posições de Produtos: guia completo
Instalar, configurar e utilizar o módulo de posições de produtos: arrastar e largar, ordenação automática multicritério, fixação das posições e proteção contra as importações de ERP para PrestaShop 8 e 9.
Apresentação
O módulo Posições de Produtos oferece uma interface moderna de arrastar e largar para reorganizar os produtos nas suas categorias PrestaShop, acompanhada de ferramentas de ordenação automática e de um sistema de fixação que protege as posições escolhidas contra alterações automatizadas (importações de ERP, CSV, scripts de terceiros).
O módulo é compatível com PrestaShop 8 e 9, em loja única ou multiloja, e está traduzido em francês, inglês, espanhol, alemão e italiano. Escreve diretamente na coluna position padrão do PrestaShop: a ordem definida no back-office aparece de forma idêntica no front-office, sem configuração adicional nem integração no tema.
A interface do módulo é de back-office e o seu pacote de traduções não inclui o português: numa loja portuguesa, os ecrãs de gestão aparecem no idioma de recurso. Isto não afeta o front-office, onde só é visível a ordem dos produtos.
Compatibilidade e pré-requisitos
- PrestaShop 8.0 a 9.x: um único pacote cobre os dois ramos, sem configuração específica.
- PHP 8.0 a 8.4.
- Loja única e multiloja.
- Sem dependências Composer, sem serviços externos e sem JavaScript de terceiros: o jQuery e o jQuery UI são fornecidos nativamente pelo PrestaShop.
- O PrestaShop 1.7 não é suportado: a API de administração e o sistema de hooks diferem demasiado para garantir um comportamento fiável.
A compatibilidade com o PrestaShop 9 está disponível a partir da versão 1.2.0 do módulo. Se migrar uma loja PrestaShop 8 para PrestaShop 9, instale a última versão do módulo antes ou depois da subida de versão: as suas posições e fixações são conservadas, uma vez que a tabela de fixação não é alterada pela atualização.
Instalação
- No back-office, abra Módulos > Gestor de módulos.
- Clique em Carregar um módulo e coloque o arquivo ZIP.
- Terminada a instalação, aparece a entrada Catálogo > Posições de produtos no menu.
Na instalação, o módulo cria uma tabela dedicada ao sistema de fixação e regista os hooks necessários ao restauro automático das posições bloqueadas.
Para atualizar o módulo, basta colocar o novo arquivo por cima do antigo: os scripts de migração executam-se automaticamente e as suas fixações e posições são preservadas.
Interface
O ecrã de gestão tem três zonas principais:
- Árvore de categorias à esquerda: navegação completa na hierarquia, pesquisa instantânea, contador de produtos e contador de fixações para cada categoria.
- Barra de ferramentas no canto superior direito: pesquisa na categoria atual, menu Bloqueio (laranja) e menu Ordenação automática (roxo).
- Lista de produtos ao centro: cada produto tem uma pega de arrastar e largar, um número de posição editável com um clique e quatro ações rápidas, que são fixar, enviar para o topo, enviar para o fundo e editar a ficha.
Os seletores de loja e de idioma no topo do ecrã permitem trocar de contexto sem sair da página.
Reorganizar os produtos manualmente
Arrastar e largar
Agarre a pega à esquerda de um produto e arraste-o para o local pretendido. As posições são gravadas automaticamente assim que solta.
Edição direta do número
Clique no número de posição de um produto para o alterar com o teclado. Confirme com Enter; prima Esc para cancelar. O módulo desloca automaticamente os outros produtos para integrar a nova posição.
Botões «Para o topo» e «Para o fundo»
Dois botões rápidos enviam um produto para a primeira ou para a última posição da categoria com um único clique.
Ordenação automática
O menu Ordenação automática aplica uma ordenação a todos os produtos da categoria segundo o critério escolhido. Os critérios disponíveis são:
- Por nome: A → Z ou Z → A, com base no nome no idioma atual.
- Por preço: crescente ou decrescente.
- Por stock: stock elevado primeiro ou stock baixo primeiro, com ordem alfabética como desempate.
- Por vendas (últimos 90 dias): mais vendidos ou menos vendidos primeiro, calculado sobre as encomendas válidas da loja atual.
- Mais recentes / mais antigos: consoante a data de adição do produto.
- Referência A → Z: ordenação alfabética pela referência interna.
- Inverter a ordem atual: vira a lista completa.
- Ordem aleatória: ordem sorteada a cada execução.
A opção Aplicar também às subcategorias propaga a ordenação a todas as categorias descendentes numa única operação.
Os produtos fixados mantêm a sua posição durante a ordenação: só os produtos não fixados são reorganizados (ver a secção seguinte).
A ordenação por nome usa a ordenação da base de dados. Numa loja portuguesa, verifique num lote de teste como são tratados os nomes acentuados (á, ã, ç) antes de aplicar a ordenação a todo o catálogo, uma vez que o resultado depende do collation da sua base de dados.
Fixação das posições
A fixação permite congelar a posição de um produto para que não mude nem numa ordenação automática, nem na sequência de uma alteração externa (importação de ERP, atualização de produto pelo back-office, script). É uma camada de proteção opcional: sem fixação, a ordem manual mantém-se válida enquanto não lançar uma ordenação automática e nenhum sistema externo tocar nas posições.
Fixar um produto individualmente
Em cada linha de produto, o ícone de fixação alterna o estado fixado / não fixado do produto na categoria atual. Um produto fixado recebe um filete laranja e um pequeno emblema de fixação no seu número de posição. O contador de fixados na barra de estado e na árvore atualiza-se automaticamente.
Pode sempre deslocar manualmente um produto fixado (arrastar e largar, edição direta, botões rápidos): a posição bloqueada acompanha então o movimento. Só a ordenação automática e as alterações externas ficam bloqueadas.
Bloquear toda a categoria
O menu Bloqueio > Bloquear toda a categoria fixa de uma só vez todos os produtos da categoria atual na respetiva posição. É a opção recomendada para catálogos alimentados por um ERP que ressincroniza regularmente as categorias: uma vez bloqueada a categoria, nenhuma importação externa pode alterar a ordem.
Desbloquear tudo
A opção Desbloquear tudo retira todas as fixações da categoria atual numa única ação. As posições atuais são conservadas; apenas a proteção é levantada.
Restaurar as posições fixadas
A opção Restaurar as posições fixadas volta a executar manualmente o algoritmo de restauro na categoria atual. É útil depois de uma importação grande, para verificar visualmente que todas as posições bloqueadas voltaram ao lugar, embora o hook de restauro automático já seja acionado a cada atualização de produto.
Casos de utilização
Colocar os N primeiros produtos em manual e ordenar o resto de A a Z
Cenário frequente: posicionar manualmente os 5 ou 10 primeiros produtos de uma categoria (destaques, campeões de vendas, novidades) e ordenar alfabeticamente todo o resto.
- Selecione a categoria na árvore.
- Organize os seus N primeiros produtos pela ordem pretendida (arrastar e largar ou edição direta).
- Clique no ícone de fixação de cada um desses N produtos.
- Abra Ordenação automática > Por nome > A → Z.
Os N produtos fixados mantêm-se nas suas posições; os restantes são ordenados alfabeticamente a partir da posição N+1. O mesmo mecanismo funciona com todos os critérios de ordenação.
Proteger uma categoria contra uma importação de ERP
Cenário frequente: o seu ERP ou um script externo ressincroniza regularmente as ligações produto / categoria, o que repõe as posições a zero.
- Organize a categoria pela ordem pretendida.
- Abra Bloqueio > Bloquear toda a categoria.
- Confirme: todos os produtos ficam fixados na sua posição atual.
A partir desse momento, cada atualização de um produto bloqueado que passe pelo PrestaShop, seja pela ficha de produto do back-office, pelo webservice, pela importação CSV nativa ou por um módulo de terceiros que manipule o objeto Product, aciona automaticamente o restauro da sua posição de origem.
Um script que escreva diretamente na base de dados, sem passar pelo objeto Product, não aciona qualquer hook do PrestaShop: nesse caso, o restauro automático não pode acontecer. Execute então Bloqueio > Restaurar as posições fixadas depois da importação, ou chame esse restauro no fim do seu script de sincronização.
Multiloja
O módulo é totalmente compatível com a funcionalidade multiloja do PrestaShop. O seletor de loja no topo da interface troca o contexto. As posições e as fixações são independentes por par (categoria, loja): fixar um produto na loja A não o bloqueia na loja B.
Multi-idioma
A interface do back-office está traduzida em francês, inglês, espanhol, alemão e italiano. O seletor de idioma no topo do ecrã muda o idioma da árvore e dos nomes de produto apresentados; as posições são comuns a todos os idiomas de uma loja (comportamento nativo do PrestaShop).
Desempenho
O módulo usa consultas SQL otimizadas, com junções sobre os índices existentes (category_product, product_shop, stock_available). A gravação das posições tem debounce do lado do JavaScript, para evitar pedidos sucessivos em reorganizações rápidas. A tabela de fixação tem uma chave primária composta e dois índices secundários, para restauros muito rápidos mesmo em categorias com várias centenas de produtos. O restauro está ainda protegido contra a reentrância, o que evita ciclos nas atualizações em massa.
Desinstalação
A desinstalação do módulo elimina a tabela de fixação e a entrada de menu correspondente. As posições em category_product permanecem intactas: a sua ordem atual é preservada. Apenas a proteção (fixação e restauro automático) é levantada.
Perguntas frequentes
É preciso fixar cada produto para que a ordem manual se mantenha?
Não. A ordem definida por arrastar e largar ou por edição direta é gravada na coluna position padrão do PrestaShop e aí permanece enquanto nenhuma ordenação automática ou importação externa a alterar. A fixação é uma camada de proteção opcional, útil apenas se quiser combinar posições manuais com ordenação automática, ou se o seu ERP mexer nas ligações produto / categoria durante as importações.
A ordem definida no back-office reflete-se mesmo no front-office?
Sim, sem configuração adicional. O módulo escreve na coluna nativa category_product.position, que o PrestaShop já utiliza para ordenar as listas de produtos no front-office. Não é necessária qualquer integração no tema nem hooks adicionais.
O meu ERP ressincroniza as categorias a cada importação: o que devo fazer?
Abra o menu Bloqueio > Bloquear toda a categoria. Isso fixa de uma só vez todos os produtos na sua posição atual. O hook de restauro automático repõe depois as posições sempre que o ERP altera um produto bloqueado através do objeto Product. Se o seu ERP escrever diretamente em SQL, acrescente uma chamada a Restaurar as posições fixadas no fim da importação.
É possível deslocar um produto fixado?
Sim. A fixação protege contra as alterações automáticas (ordenação automática, importações externas). Quando desloca manualmente um produto fixado (arrastar e largar, edição da posição, botão para o topo ou para o fundo), a posição bloqueada é atualizada para acompanhar o movimento.
A ordenação automática funciona com as subcategorias?
Sim. Assinale a opção Aplicar também às subcategorias no menu de ordenação para propagar o critério a todas as subcategorias da categoria atual numa única operação.
O módulo é compatível com o PrestaShop 9?
Sim, desde a versão 1.2.0. O mesmo pacote cobre PrestaShop 8.0 a 9.x, em loja única ou multiloja, sem dependências Composer nem JavaScript externo (o jQuery e o jQuery UI são fornecidos nativamente pelo PrestaShop).
O módulo substitui o ecrã nativo de posições de categoria?
Não, acrescenta-se como complemento. O ecrã nativo do PrestaShop continua disponível; o módulo fornece uma interface mais moderna, com a fixação e a ordenação multicritério como extras.
A lista de produtos não carrega, ou a pesquisa comporta-se mal.
Limpe a cache do PrestaShop (Parâmetros avançados > Desempenho) e recarregue a página forçando a atualização do navegador. O módulo acrescenta um número de versão aos seus ficheiros CSS e JS, mas uma cache de navegador ou um proxy agressivo pode conservar uma cópia antiga depois de uma atualização.