Produtos Virtuais Pro - ficheiros para descarregar por combinação, versões e sincronização com GitHub
No PrestaShop 9 os tipos Produto virtual e Produto com combinações excluem-se mutuamente — por isso um produto vendido em várias edições ou níveis de licença não pode normalmente ter um ficheiro por variante. Este módulo gere os ficheiros para descarregar independentemente dessa restrição, dando a cada combinação o seu próprio ficheiro, número de versão e registo de alterações. Gere todo o catálogo a partir de uma única página em vez de abrir os produtos um a um, ligue uma combinação a um repositório GitHub e obtenha o ficheiro, a versão e o registo de alterações com um só botão, e envie e-mail aos clientes que já compraram quando sair uma nova versão. Para PrestaShop 1.7 – 9.
O problema do PrestaShop 9 que este módulo resolve
No PrestaShop 9, "Produto virtual" e "Produto com combinações" são tipos de produto mutuamente exclusivos. Isso não é problema até vender software, e-books, amostras ou licenças em mais do que uma variante — Standard e Pro, um posto e equipa, Windows e macOS — porque no momento em que precisa de combinações, o campo de ficheiro do produto virtual deixa de estar disponível.
Este módulo gere os ficheiros para descarregar fora do sistema de produtos virtuais do PrestaShop. Crie o produto como Produto com combinações, defina as variantes e carregue um ficheiro em cada uma. Cada combinação recebe o seu próprio ficheiro, o seu próprio número de versão e o seu próprio registo de alterações.
Uma página em vez de um produto de cada vez
Os ficheiros de todo o catálogo vivem num único ecrã. Expanda um produto, veja as suas combinações, carregue ou substitua um ficheiro, defina a versão, escreva o registo de alterações. Sete contadores no topo mostram a situação num relance — Virtual Files, Products, Combination Files, Simple Files, Missing Files, Total Downloads e Customers — de modo que um produto a que nunca foi carregado um ficheiro aparece ali a vermelho, em vez de ser descoberto por um cliente.
Cada ficheiro tem também o seu próprio limite de descarregamentos, validade em dias e data de expiração, pelo que uma licença pode ser limitada no tempo em vez de entregue indefinidamente. Qualquer formato descarregável funciona: ZIP, PDF, MP3, FLAC, EPUB e tudo o mais que venda.
Ligue uma combinação ao GitHub e deixe de carregar ficheiros
Cada combinação funciona num de dois modos: Upload File ou GitHub Repository. Mude-a para GitHub, indique owner/repo e, opcionalmente, um ramo ou uma etiqueta, e um único botão Fetch / Sync from GitHub traz o ficheiro, a versão e o registo de alterações em conjunto — empacotando a versão publicada, extraindo o número de versão e lendo os assuntos dos commits recentes do lado do servidor, e não apenas preenchendo uma caixa no seu navegador.
Os repositórios privados são suportados através de um Personal Access Token. Defina um Default GitHub Personal Access Token uma vez para toda a loja e substitua-o ao nível do produto quando outro repositório exigir credenciais diferentes.
Uma tabela Recent Sync Log regista o que realmente aconteceu em cada execução — produto, combinação, estado, mensagem e data — mostrando a transição da versão antiga para a nova, ou explicitamente "no version change" quando uma execução não encontrou nada. Acima dela fica a indicação Last automatic run, para que perceba de imediato se a sincronização agendada foi realmente executada ou nunca chegou a correr.
Uma ressalva honesta: a sincronização horária assenta no próprio sistema de tarefas cron do PrestaShop, que precisa de um cron externo real no seu servidor. Até isso estar configurado, o botão manual Fetch / Sync from GitHub faz o mesmo trabalho quando quiser — e a linha Last automatic run continuará a dizer never, que é precisamente a razão de ser mostrada.
Nota sobre o idioma: ao contrário dos outros idiomas, este módulo não inclui uma tradução completa para português — a interface de administração aparece em inglês, e é por isso que os nomes dos painéis e botões estão aqui em inglês, tal como os verá no ecrã.
Avise os seus clientes de que existe uma atualização
Cada combinação tem o seu próprio botão Notify Customers, que envia e-mail aos clientes que compraram esse produto a informar que está disponível uma nova versão. Para tudo o que é vendido como licença ou ferramenta, esse único botão faz a diferença entre um cliente que atualiza e outro que se esquece de que o possui.
Os clientes têm uma área de descargas adequada
Os compradores veem os seus ficheiros na respetiva conta e na página de detalhe da encomenda, com a versão a que têm direito. É a experiência normal de conta do PrestaShop, alargada para cobrir ficheiros por combinação que o núcleo do sistema não consegue representar.
O que a versão 1.5.x corrigiu
A versão 1.5.2 corrigiu um conjunto de defeitos reais que vale a pena conhecer, porque são do tipo que se esconde durante meses.
O campo do registo de alterações nunca podia ser atualizado pela sincronização. Ambos os caminhos de sincronização omitiam changelog da instrução UPDATE, pelo que, depois de existir a linha de uma combinação, o campo ficava congelado no último valor escrito à mão — e nenhum dos caminhos ia buscar o conteúdo do registo de alterações ao GitHub do lado do servidor. A sincronização passa a ler os assuntos dos commits recentes da referência resolvida e a guardá-los na mesma operação, tanto no caminho manual como no automático.
Os caminhos manual e automático de sincronização tinham divergido. O ponto de entrada manual reimplementava por si as chamadas ao GitHub, o tratamento do ficheiro zip e a extração da versão, pelo que uma correção aplicada a um deles silenciosamente não se aplicava ao outro. O caminho manual passa a delegar na classe de sincronização partilhada — continuando a tirar o repositório e a referência do formulário que tem à frente, para que experimentar antes de guardar continue a funcionar.
A sincronização horária registava sempre "success" sem qualquer detalhe, mesmo quando nada mudava, o que tornava o registo inútil para distinguir uma execução tranquila de uma falha silenciosa. Além disso, as instalações novas nunca registavam o hook de cron — só o bloco de auto-reparação da página de configuração o fazia, pelo que a sincronização horária não podia disparar até um administrador abrir essa página por acaso. A instalação passa a registá-lo diretamente.
Uma coisa a planear
Como o produto não está marcado como virtual no PrestaShop, continua a aplicar-se o cálculo normal de portes. Para manter estes produtos livres de custos de envio, atribua-os a uma transportadora com uma regra de custo zero / envio gratuito. É um passo de configuração único, e a própria página de configuração do módulo diz isso claramente, em vez de o deixar descobrir numa encomenda real.
Compatibilidade
PrestaShop 1.7, 8 e 9, em oito idiomas: neerlandês, inglês, francês, alemão, italiano, polaco, espanhol e turco. Compatível com multiloja. A desinstalação remove os dados do módulo e os ficheiros virtuais que ele gere, o que a confirmação de desinstalação afirma abertamente — faça primeiro uma cópia se pretender reinstalar.
Perguntas frequentes
Porque preciso disto no PrestaShop 9?
Porque o PS 9 torna Produto virtual e Produto com combinações mutuamente exclusivos. Se vende um produto descarregável em várias edições ou níveis, o núcleo do sistema não consegue dar a cada variante o seu próprio ficheiro. Este módulo consegue.
Cada combinação pode ter um ficheiro e uma versão diferentes?
Sim — o seu próprio ficheiro, o seu próprio número de versão e o seu próprio registo de alterações. É esse o objetivo do módulo.
Como funciona a sincronização com o GitHub?
Mude a combinação para o modo GitHub Repository, indique owner/repo mais um ramo ou etiqueta opcional e prima Fetch / Sync from GitHub — traz o ficheiro, a versão e o registo de alterações de uma só vez. Os repositórios privados funcionam através de um Personal Access Token, definido uma vez como predefinição da loja e substituível ao nível do produto. A sincronização automática horária exige ainda o sistema de tarefas cron do PrestaShop acionado por um cron real no seu servidor.
Os meus clientes saberão quando eu lançar uma atualização?
Sim, se premir Notify Customers na combinação — envia e-mail aos clientes que compraram esse produto.
Estes produtos vão ser cobrados com portes?
Podem ser, porque o PrestaShop não os vê como virtuais. Atribua-os a uma transportadora com uma regra de envio gratuito e a cobrança desaparece.
Que tipos de ficheiro são suportados?
ZIP, PDF, MP3, FLAC, EPUB e qualquer outro formato descarregável.
Como identifico um produto a que falta o ficheiro?
Os contadores no topo da página incluem o valor Missing Files, pelo que a falha aparece ali e não numa reclamação de cliente.
O que acontece se desinstalar?
Os dados do módulo e os ficheiros virtuais que ele gere são eliminados — a confirmação diz isso mesmo. Guarde uma cópia de tudo o que voltará a precisar.
-
CompatibilidadePrestashop 1.6
Prestashop 1.7
Prestashop 8
Prestashop 9 -
Traduções Disponíveis do MóduloAlemão
Espanhol
Francês
Inglês
Italiano
Neerlandês
Polonês
Português
Turco
MEG Venture
4 other products in the same category
| Versão | 1.5.2 |
|---|---|
| Última atualização | 2026-07-30 |
| Registo de alterações | - [2026-07-30] Add missing translation keys for virtual product combination module in Turkish - [2026-07-27] Fix GitHub sync never persisting changelog updates (v1.5.2) - [2026-07-24] Add translations for Virtual Products Management Pro module in Dutch, Polish, and Turkish - [2026-07-23] fix: correct upgrade function name for version 1.4.12 to prevent upgrade failures - [2026-07-23] Fix protected-property access when loading the sync class in syncall.php - [2026-07-23] Fix "Class VirtualProductCombinationGithubSync not found" in syncall.php - [2026-07-23] Fix Sync All Now hitting admin dispatcher instead of front controller - [2026-07-23] Fix boolean passed as log message in syncall.php - [2026-07-23] Fix SQL syntax error: duplicate LIMIT 1 in notification queries - [2026-07-23] Fix root cause: version extraction bailed out before opening the zip - [2026-07-23] Fix literal backslash-n in version-change confirm dialog - [2026-07-23] Add composer.json and ultra-permissive fallback for version extraction - [2026-07-23] Add dual-method brute-force version extraction as fallback - [2026-07-23] Improve version extraction with comprehensive PHP parsing - [2026-07-23] Improve version extraction regex to handle more module formats - [2026-07-23] Fix version change detection and add manual sync trigger button - [2026-07-23] Add version detection and auto-send notifications for GitHub sync - [2026-07-23] Implement automatic GitHub synchronization feature with logging - [2026-07-23] Populate translation files with complete translatable strings - [2026-07-23] Populate translation files with complete translatable strings - [2026-07-23] Populate translation files with complete translatable strings - [2026-07-23] Add authentic translations for FR, DE, PL, NL, TR, IT, ES - [2026-07-23] Populate translation files with complete translatable strings - [2026-07-23] Populate translation files with complete translatable strings - [2026-07-23] Add missing translation files (fr, de, pl, nl, tr, it, es) - [2026-07-22] feat: Repackage GitHub zipball for PrestaShop compatibility - [2026-07-22] feat: Add GitHub integration for virtual product combinations - [2026-07-07] v1.4.17: Block native virtual files on product page - [2026-07-07] Fix virtual product notice on creation and ProductDownload save error - [2026-07-06] Batch-load GitHub URLs and PATs for products from admin panel configuration |
• [2026-07-07] Fix virtual product notice on creation and ProductDownload save error
• [2026-07-06] Batch-load GitHub URLs and PATs for products from admin panel configuration
• [2026-07-04] Add GitHub URL and PAT handling in product data retrieval and save methods
• [2026-07-04] Enhance language handling in product data retrieval and save methods, adding GitHub URL persistence and improving data accuracy in admin UI
• [2026-06-29] Improve SQL query in getVirtualData to filter out orphaned combination rows, ensuring accurate data in admin UI
• [2026-06-29] Enhance logging in getVirtualData success callback to include matched product count for improved debugging
• [2026-06-29] Add logging to getVirtualData success callback for improved debugging
• [2026-06-29] Refactor getVirtualData method to query product download data directly, ensuring fresh results and improved data accuracy
• [2026-06-29] Enhance save method to return fresh data immediately after saving, improving user experience and data accuracy
• [2026-06-29] Update response handling in getVirtualData and save methods for improved JSON output and error visibility
• [2026-06-29] Enhance save method response by including database error details and verification data for improved debugging and transparency
• [2026-06-29] Add cache: false to AJAX request for improved data freshness
• [2026-06-29] Improve save method response handling and logging for better error visibility
• [2026-06-29] Remove limit from changelog version query to retrieve all entries for accurate version comparison
• [2026-06-29] Improve error handling in save method and update AJAX response to JSON format
• [2026-06-29] Enhance KPI metrics in admin panel by adding total files, products covered, combination files, simple files, missing files, total downloads, and customers with downloads.
• [2026-06-26] Add conditions to filter active product downloads in getProductDownloads method
• [2026-06-26] Increase the number of commits fetched from GitHub API from 5 to 30
• [2026-06-24] .
• [2026-06-24] .
• [2026-06-24] .
• [2026-06-24] .
• [2026-06-24] .
• [2026-06-24] order detail page fix
• [2026-06-24] My Downloads page link is fixed
• [2026-06-24] Order detail page download link display problem is solved
• [2026-06-24] .
• [2026-06-24] .
• [2026-06-24] .
• [2026-06-29] Enhance logging in getVirtualData success callback to include matched product count for improved debugging
• [2026-06-29] Add logging to getVirtualData success callback for improved debugging
• [2026-06-29] Refactor getVirtualData method to query product download data directly, ensuring fresh results and improved data accuracy
• [2026-06-29] Enhance save method to return fresh data immediately after saving, improving user experience and data accuracy
• [2026-06-29] Update response handling in getVirtualData and save methods for improved JSON output and error visibility
• [2026-06-29] Enhance save method response by including database error details and verification data for improved debugging and transparency
• [2026-06-29] Add cache: false to AJAX request for improved data freshness
• [2026-06-29] Improve save method response handling and logging for better error visibility
• [2026-06-29] Remove limit from changelog version query to retrieve all entries for accurate version comparison
• [2026-06-29] Improve error handling in save method and update AJAX response to JSON format
• [2026-06-29] Enhance KPI metrics in admin panel by adding total files, products covered, combination files, simple files, missing files, total downloads, and customers with downloads.
• [2026-06-26] Add conditions to filter active product downloads in getProductDownloads method
• [2026-06-26] Increase the number of commits fetched from GitHub API from 5 to 30
• [2026-06-24] .
• [2026-06-24] .
• [2026-06-24] .
• [2026-06-24] .
• [2026-06-24] .
• [2026-06-24] order detail page fix
• [2026-06-24] My Downloads page link is fixed
• [2026-06-24] Order detail page download link display problem is solved
• [2026-06-24] .
• [2026-06-24] .
• [2026-06-24] .
• [2026-06-24] feat: Ensure download hashes are generated for orders before payment confirmation
• [2026-06-24] feat: Implement download hash generation for existing orders and enhance "My Downloads" functionality
• [2026-06-24] feat: Update alignment styles for "My Downloads" link in account page
• [2026-06-24] feat: Update "My Downloads" link styling and improve account page block description
• [2026-06-24] feat: Update ecotax calculations to support PrestaShop 9 compatibility and enhance "My Downloads" link styling
Comentários (6)
Não é possível enviar a apreciação da sua avaliação.
Denunciar comentário
Denúncia enviada
O seu relatório não pode ser enviado