Une place de marché de petites annonces complète pour votre site Larapen. Les utilisateurs peuvent créer, parcourir, rechercher et gérer des annonces avec des champs personnalisés, un filtrage par localisation, des galeries d’images et une messagerie intégrée : le tout avec modération par l’administrateur et permissions granulaires.
Champs personnalisés
Définissez un nombre illimité de champs personnalisés par catégorie ou globaux. Prise en charge de 10 types de champs, dont texte, liste déroulante, case à cocher, date et fourchette de prix.
Système de modération
Workflow d’approbation par l’administrateur optionnel. Approuvez, rejetez (avec motif) ou publiez automatiquement les annonces. Configurable par site.
Recherche & filtrage
Recherche plein texte dans les titres, les descriptions et les localisations. Filtrage par catégorie, fourchette de prix, état, ville et champs personnalisés.
Messagerie acheteur-vendeur
Formulaire de contact intégré avec notifications par e-mail. Messages suivis par annonce avec statut lu/non lu.
Favoris & annonces sauvegardées
Les utilisateurs authentifiés peuvent mettre des annonces en favoris pour plus tard. Sauvegarde et retrait des favoris en un seul clic.
Multi-langue
Tout le contenu des annonces, les catégories et les champs personnalisés sont traduisibles via spatie/laravel-translatable. Prise en charge i18n complète.
Expiration automatique
Les annonces expirent après un nombre de jours configurable. Les annonces expirées sont automatiquement masquées de la vue publique.
Signalement communautaire
Les utilisateurs peuvent signaler les annonces inappropriées. Les administrateurs examinent, rejettent ou traitent les signalements depuis un panneau dédié.
Cas d’utilisation
Place de marché générale
Gérez un tableau de petites annonces de type Leboncoin où les utilisateurs publient des articles à vendre, des services ou des locations. Les catégories et les champs personnalisés vous permettent de structurer tout type d’annonce.
- Activez l’inscription des utilisateurs et la création d’annonces.
- Définissez des catégories (Véhicules, Électronique, Immobilier, Emploi, etc.) avec des champs personnalisés spécifiques à chaque catégorie.
- Activez la modération pour examiner les soumissions avant leur mise en ligne.
- Les acheteurs contactent directement les vendeurs via le formulaire de contact intégré.
Annuaire d’entreprises
Créez un annuaire d’entreprises locales avec des champs personnalisés pour les horaires d’ouverture, les services proposés et les coordonnées.
- Désactivez le champ prix ou rendez-le optionnel.
- Ajoutez des champs personnalisés comme “Horaires d’ouverture”, “URL du site web” et “Services proposés”.
- Utilisez les champs de localisation (ville, région, adresse) pour le filtrage géographique.
Tableau d’actifs interne
Un tableau privé permettant à une organisation de lister et d’échanger des actifs, équipements ou ressources internes.
- Désactivez la navigation pour les visiteurs : exigez la connexion pour voir les annonces.
- Désactivez la publication publique : seuls les administrateurs créent les annonces.
- Utilisez le champ “état” (neuf, occasion, reconditionné) pour le suivi des actifs.
Prérequis
| Prérequis | Détails |
|---|---|
| Larapen Core | ≥ 1.0.0 |
| PHP | ≥ 8.2 |
| MySQL | ≥ 8.0 |
| Comptes utilisateurs | Requis : l’add-on dépend de la table users du noyau pour la propriété des annonces, la messagerie, les favoris et le signalement. |
| Dépendances | Aucune : aucun autre add-on requis. |
Installation
Étape 1 : Téléverser l’add-on
Dans le panneau d’administration, allez dans Admin → Extensions → Add-ons et cliquez sur le bouton Télécharger un add-on. Sélectionnez le fichier ZIP de l’add-on : le système le décompresse automatiquement et l’add-on apparaît dans la liste des add-ons installés.
Étape 2 : Activer l’add-on
Repérez Petites annonces dans la liste et cliquez sur Activer. Ses migrations, ses seeders (le cas échéant) et ses permissions sont mis en place automatiquement.
Étape 3 : Configurer
Naviguez vers Admin → Petites annonces → Paramètres pour configurer les catégories, les formules tarifaires, les règles de modération et les notifications. Voir Configuration.
Code d’achat (clé de licence)
Petites annonces est vendu comme un produit séparé, il possède donc son propre code d’achat (clé de licence), distinct du code d’achat de l’application principale et de celui de chaque autre add-on. Il vous est demandé lorsque vous activez Petites annonces dans Panneau d’administration → Add-ons.
Nos produits sont vendus sur trois plateformes. La façon dont vous recevez un code d’achat dépend de l’endroit où vous avez acheté le produit.
| Plateforme / Marketplace | Comment obtenir le code d’achat | Où le retrouver |
|---|---|---|
| Boutique bedigit.com Achat sur le site (Shop) |
Généré automatiquement lorsque la commande est payée, puis envoyé par e-mail, soit dans un e-mail de licence dédié, soit dans l’e-mail de confirmation de commande. | Mon compte → Mes licences sur bedigit.com |
| Gumroad | Créé dès que Gumroad nous notifie la vente, puis envoyé dans un e-mail séparé, en plus du reçu Gumroad. | L’e-mail de licence, votre Bibliothèque Gumroad et Mon compte → Mes licences sur bedigit.com |
| Envato Market CodeCanyon |
Délivré par Envato, pas par nous, et jamais envoyé par e-mail : vous le téléchargez vous-même depuis votre compte Envato. | Compte Envato → Downloads → License certificate & purchase code |
1. Boutique bedigit.com (achat sur le site)
- Dès que le statut de paiement de la commande devient Payée, une clé de licence est générée automatiquement pour chaque article sous licence de la commande (une clé par unité achetée : acheter 3 unités donne 3 clés distinctes).
- Elle est envoyée par e-mail à l’adresse utilisée pour la commande, soit dans un e-mail de licence dédié, soit dans l’e-mail de confirmation de commande. Vérifiez votre boîte de réception et votre dossier spam / courrier indésirable.
- La clé reste disponible dans votre compte sous Mon compte → Mes licences. Les clés sont masquées dans la liste ; ouvrez la page de détail de la licence pour afficher et copier la clé complète, voir les domaines sur lesquels elle est activée, et désactiver un domaine pour libérer un emplacement d’activation.
- La facture correspondante se trouve sous Mon compte → Mes commandes.
2. Gumroad
- Un achat sur Gumroad produit deux e-mails distincts : le reçu Gumroad (envoyé par Gumroad, donnant accès aux fichiers) et un e-mail de clé de licence (envoyé par bedigit.com) qui contient votre code d’achat.
- L’e-mail de clé de licence est généré dès que Gumroad nous notifie la vente, il arrive donc normalement quelques secondes après le paiement. Ici aussi, vérifiez votre boîte de réception et votre dossier spam / courrier indésirable.
- Lorsque le produit Gumroad utilise la fonctionnalité de clés de licence propre à Gumroad, la même clé apparaît aussi dans votre reçu Gumroad et sous Bibliothèque → votre achat sur gumroad.com.
- Utilisez la même adresse e-mail sur bedigit.com que sur Gumroad : vos clés sont alors liées automatiquement à votre compte et listées sous Mon compte → Mes licences, même si vous vous inscrivez après l’achat. Vous pouvez aussi ajouter une clé Gumroad manuellement depuis Mon compte → Mes licences Gumroad.
3. Envato Market (CodeCanyon)
- Les codes d’achat Envato sont délivrés et fournis par Envato Market, jamais envoyés par e-mail par nous, il n’y a donc rien à chercher dans votre dossier de spam : vous récupérez le code depuis votre compte Envato.
- Connectez-vous à votre compte Envato / CodeCanyon, ouvrez la page Downloads, trouvez l’article et choisissez License certificate & purchase code dans le menu déroulant Download. Le code est inscrit dans ce certificat.
- Un code d’achat Envato ressemble à
12345678-90ab-cdef-1234-567890abcdef(8-4-4-4-12 caractères). Il ne change jamais, et le renouvellement du support de l’article n’en délivre pas de nouveau. - Article officiel Envato : Where Is My Purchase Code?
Configuration
Les valeurs par défaut de configuration sont définies dans config/classified.php et peuvent être remplacées via les paramètres d’administration (stockés en base de données avec le préfixe classified_).
| Clé du paramètre | Type | Défaut | Description |
|---|---|---|---|
per_page |
int | 12 | Annonces par page en front-end |
admin_per_page |
int | 15 | Annonces par page dans le panneau d’administration |
max_images |
int | 5 | Images maximum par annonce (image principale + galerie) |
listing_duration_days |
int | 30 | Jours avant l’expiration d’une annonce (0 = n’expire jamais) |
allow_publishing |
bool | true | Autoriser les utilisateurs à créer des annonces en front-end |
guest_browse |
bool | true | Autoriser les visiteurs non authentifiés à parcourir les annonces |
guest_contact |
bool | false | Autoriser les visiteurs à envoyer des messages aux vendeurs |
moderation_enabled |
bool | true | Exiger l’approbation d’un administrateur avant la mise en ligne des annonces |
require_phone |
bool | false | Rendre le numéro de téléphone obligatoire sur les annonces |
enable_reports |
bool | true | Autoriser les utilisateurs à signaler les annonces |
enable_favorites |
bool | true | Autoriser les utilisateurs à sauvegarder/mettre en favoris les annonces |
allow_author_translations |
bool | true | Autoriser les auteurs d’annonces à fournir des traductions |
Paramètres de notification
Chaque notification peut être activée ou désactivée individuellement depuis le panneau des paramètres d’administration :
| Clé du paramètre | Défaut | Description |
|---|---|---|
notify_admin_on_new_listing |
true | Notifier les administrateurs lorsqu’une nouvelle annonce est soumise |
notify_author_on_new_listing |
true | Envoyer un e-mail de confirmation à l’auteur de l’annonce |
notify_author_on_approval |
true | Notifier l’auteur lorsque son annonce est approuvée |
notify_author_on_rejection |
true | Notifier l’auteur lorsque son annonce est rejetée |
notify_owner_on_new_message |
true | Notifier le propriétaire de l’annonce lorsqu’un nouveau message est reçu |
notify_admin_on_report |
true | Notifier les administrateurs lorsqu’une annonce est signalée |
notify_owner_on_expiration |
true | Notifier le propriétaire de l’annonce lorsque celle-ci expire |
Admin : Paramètres
Accès via Admin → Petites annonces → Paramètres. La page des paramètres est organisée en sections logiques :
- Publication : Activez ou désactivez la création d’annonces par les utilisateurs, la navigation pour les visiteurs et le contact par les visiteurs.
- Modération : Activez ou désactivez l’approbation par un administrateur pour les nouvelles annonces.
- Durée des annonces : Définissez le nombre de jours pendant lesquels les annonces restent actives (0 pour une durée illimitée).
- Images : Nombre maximum d’images par annonce.
- Coordonnées : Si le numéro de téléphone est requis.
- Fonctionnalités : Activez ou désactivez les signalements et les favoris.
- Traductions : Autorisez les auteurs à fournir du contenu multilingue.
- Notifications : Activez ou désactivez chacun des 7 types de notification.
Affiche le formulaire des paramètres avec les valeurs actuelles.
Enregistre tous les paramètres. Validé via UpdateClassifiedSettingsRequest.
Admin : Annonces
La page de gestion des annonces fournit un tableau paginé de toutes les annonces avec filtrage par statut et par catégorie. Chaque ligne affiche le titre de l’annonce, l’auteur, la catégorie, le badge de statut, le prix, le nombre de vues, le nombre de messages, le nombre de signalements et la date de création.
Paramètres de requête
status | Filtrer par statut (draft, pending_review, published, expired, rejected, sold) |
category_id | Filtrer par ID de catégorie |
Création & modification
Le formulaire d’annonce comprend des champs pour :
- Contenu : Titre (traduisible), contenu/description (traduisible), méta titre, méta description
- Classification : Sélection de la catégorie, état de l’article (neuf, occasion, reconditionné)
- Tarification : Prix, devise, indicateur négociable
- Localisation : Ville, région, pays, adresse, latitude/longitude
- Contact : Nom du contact, e-mail, téléphone
- Média : Image principale + images de la galerie (jusqu’au maximum configuré)
- Champs personnalisés : Champs dynamiques chargés en fonction de la catégorie sélectionnée (via AJAX)
- Statut : Brouillon, en attente de validation, publié (l’administrateur peut contourner la modération)
- Options : Mise en avant, date d’expiration, position
Formulaire de création d’annonce.
Enregistre une nouvelle annonce. Validé via Admin\StoreListingRequest. Gère les téléversements d’images et les valeurs des champs personnalisés.
Formulaire de modification d’une annonce existante.
Met à jour une annonce existante. Permet de remplacer l’image principale, d’ajouter ou de supprimer des images de la galerie et de mettre à jour les valeurs des champs personnalisés.
Supprime une annonce ainsi que tous les médias, valeurs de champs personnalisés, messages, signalements et entrées sauvegardées associés (via cascade).
Modération
Lorsque la modération est activée, les nouvelles annonces sont placées au statut pending_review. Les administrateurs peuvent les approuver ou les rejeter :
Définit le statut de l’annonce à published, enregistre la date de publication et efface tout motif de rejet. Envoie une notification d’approbation à l’auteur (si activée).
Corps de la requête
reason | Requis : le motif du rejet (envoyé à l’auteur par e-mail) |
Admin : Catégories
Les catégories de petites annonces utilisent la table unifiée categories du noyau avec categorizable_type = 'listing'. Les catégories prennent en charge l’imbrication (hiérarchie parent/enfant via ensemble imbriqué) et sont traduisibles.
Vue arborescente paginée de toutes les catégories d’annonces.
Crée une nouvelle catégorie. Validé via StoreCategoryRequest. Champs : nom (traduisible), slug (traduisible), description (traduisible), méta titre, méta description, catégorie parente, position, statut actif.
Met à jour une catégorie et reconstruit l’arbre de l’ensemble imbriqué.
Supprime une catégorie. Les annonces de la catégorie supprimée verront leur category_id défini à null.
Admin : Champs personnalisés
Les champs personnalisés vous permettent d’étendre les annonces avec des attributs globaux ou spécifiques à une catégorie. Les champs peuvent être marqués comme filtrables (affichés dans les filtres de recherche) et recherchables (inclus dans la recherche plein texte).
Liste paginée de tous les champs personnalisés avec filtre par catégorie.
Champs
name | Traduisible : libellé du champ |
slug | Identifiant unique |
type | Un des 10 types de champs pris en charge |
category_id | Nullable : null signifie que le champ s’applique à toutes les catégories |
placeholder | Traduisible : texte indicatif |
help_text | Traduisible : texte d’aide affiché sous le champ |
options | Tableau JSON : pour les types liste déroulante, case à cocher et bouton radio |
is_required | Si le champ est obligatoire |
is_filterable | Afficher dans la barre latérale de recherche/filtrage |
is_searchable | Inclure dans la recherche plein texte |
min_value / max_value | Bornes de validation pour les champs numériques |
position | Ordre d’affichage |
Types de champs pris en charge
| Type | Valeur | A des options ? | Champ HTML |
|---|---|---|---|
| Texte | text | Non | <input type="text"> |
| Zone de texte | textarea | Non | <textarea> |
| Nombre | number | Non | <input type="number"> |
| Liste déroulante | select | Oui | <select> |
| Case à cocher | checkbox | Oui | <input type="checkbox"> |
| Bouton radio | radio | Oui | <input type="radio"> |
| Date | date | Non | <input type="date"> |
| Fourchette de prix | price_range | Non | <input type="number"> |
| URL | url | Non | <input type="url"> |
email | Non | <input type="email"> |
GET /api/classified/custom-fields/{categoryId?} retourne les champs pertinents pour cette catégorie (plus les champs globaux éventuels).
Admin : Messages
Consultez tous les messages envoyés via les formulaires de contact des annonces. Les messages peuvent être filtrés par statut lu/non lu.
Liste paginée des messages avec l’expéditeur, l’annonce, la date et le statut de lecture. Permet le filtrage par messages non lus.
Affiche les détails du message. Marque automatiquement le message comme lu.
Supprime définitivement un message.
Admin : Signalements
Consultez et gérez les signalements d’annonces soumis par les utilisateurs. Les signalements comportent un motif (spam, contenu inapproprié, fraude, mauvaise catégorie, annonce en double ou autre) et une description optionnelle.
Liste paginée des signalements avec filtre par statut (en attente, examiné, rejeté).
Examine un signalement : définit le statut à reviewed ou dismissed. Enregistre l’examinateur et l’horodatage de l’examen.
Supprime définitivement un signalement.
Motifs de signalement
| Valeur | Description |
|---|---|
spam | L’annonce est du spam ou de la publicité non sollicitée |
inappropriate | Le contenu viole les règles de la communauté |
fraud | Annonce suspectée d’être frauduleuse |
wrong_category | L’annonce est dans la mauvaise catégorie |
duplicate | Doublon d’une autre annonce |
other | Autre motif (l’utilisateur fournit une description) |
Front-end : Navigation & recherche
La page publique des petites annonces affiche les annonces publiées et non expirées, triées par mise en avant, date de publication et position. Les visiteurs peuvent filtrer et rechercher des annonces selon plusieurs critères.
Options de recherche & de filtrage
| Filtre | Paramètre | Description |
|---|---|---|
| Recherche par mot-clé | search | Recherche plein texte dans le titre, le contenu, la ville et la région |
| Catégorie | category_id | Filtrer par catégorie |
| Ville | city | Filtrage par localisation (correspondance LIKE) |
| Prix min | price_min | Seuil de prix minimum |
| Prix max | price_max | Seuil de prix maximum |
| État | condition | État de l’article (neuf, occasion, reconditionné) |
guest_browse à false dans les paramètres d’administration. Lorsqu’elle est désactivée, le middleware ClassifiedGuestAccess redirige les visiteurs non authentifiés vers la page de connexion.
Navigation par catégorie
Accès via /classifieds/category/{slug}. Affiche les annonces filtrées par la catégorie indiquée, avec la recherche et le filtrage complets disponibles au sein de cette catégorie.
Front-end : Détail de l’annonce
Accès via /classifieds/{slug}. La page de détail de l’annonce comprend :
- Titre complet, description et valeurs des champs personnalisés
- Galerie d’images (image principale + images supplémentaires de la galerie)
- Prix avec formatage de la devise et indicateur négociable
- Badge de l’état de l’article
- Informations de localisation (ville, région, pays, adresse)
- Coordonnées du vendeur
- Formulaire de contact (pour envoyer un message au vendeur)
- Bouton sauvegarder/retirer des favoris (pour les utilisateurs authentifiés)
- Bouton de signalement (pour les utilisateurs authentifiés)
- Annonces similaires (même catégorie ou même ville)
- Nombre de vues (incrémenté à chaque visite)
Front-end : Créer & modifier des annonces
Les utilisateurs authentifiés peuvent créer et modifier leurs propres annonces depuis le front-end. Cette fonctionnalité peut être désactivée pour tout le site en définissant allow_publishing à false.
Formulaire de création d’annonce. Nécessite une authentification. Protégé par le middleware CheckPublishingEnabled.
Soumet une nouvelle annonce. Validé via Front\StoreListingRequest. Lorsque la modération est activée, l’annonce est placée au statut pending_review et nécessite l’approbation d’un administrateur.
Formulaire de modification d’une annonce. Seul le propriétaire de l’annonce peut accéder à cette page.
Met à jour une annonce. Validé via Front\UpdateListingRequest.
pending_review (même si l’utilisateur sélectionne “publié”). Seules les annonces créées par un administrateur ou approuvées par un administrateur contournent la modération.
Front-end : Mes annonces
Accès via /classifieds/my/listings. Les utilisateurs authentifiés peuvent consulter toutes leurs annonces avec des onglets par statut : toutes, actives, en attente, expirées, vendues et brouillons.
Depuis cette page, les utilisateurs peuvent :
- Voir le statut de l’annonce et le nombre de messages
- Modifier leurs annonces
- Supprimer leurs annonces
Supprime une annonce. Seul le propriétaire de l’annonce peut effectuer cette action.
Front-end : Annonces sauvegardées
Accès via /classifieds/my/saved. Les utilisateurs peuvent mettre des annonces en favoris et les consulter plus tard depuis une page dédiée aux annonces sauvegardées.
Bascule la sauvegarde d’une annonce. Retourne si l’annonce est désormais sauvegardée (true) ou retirée des favoris (false). Fonctionne comme un basculement AJAX.
enable_favorites à false dans les paramètres d’administration.
Front-end : Contacter le vendeur
Chaque page de détail d’annonce inclut un formulaire de contact qui envoie un message au propriétaire de l’annonce.
Corps de la requête
sender_name | Requis : nom de l’expéditeur |
sender_email | Requis : e-mail de l’expéditeur |
sender_phone | Optionnel : téléphone de l’expéditeur |
message | Requis : le corps du message |
Le contact par les visiteurs se contrôle via le paramètre guest_contact. Lorsqu’il est désactivé, seuls les utilisateurs authentifiés peuvent envoyer des messages.
Front-end : Signalement
Les utilisateurs authentifiés peuvent signaler les annonces qui violent les règles de la communauté.
Corps de la requête
reason | Requis : un parmi : spam, inappropriate, fraud, wrong_category, duplicate, other |
description | Optionnel : détails supplémentaires sur le signalement |
Notifications
L’add-on inclut 7 classes de notification par e-mail, toutes étendant BaseNotification et utilisant le canal mail. Chaque notification peut être activée ou désactivée individuellement via les paramètres d’administration.
| Notification | Destinataire | Déclencheur | Paramètre |
|---|---|---|---|
NewListingAdminNotification |
Administrateurs | Nouvelle annonce soumise | notify_admin_on_new_listing |
ListingConfirmationNotification |
Auteur de l’annonce | Annonce soumise | notify_author_on_new_listing |
ListingApprovedNotification |
Auteur de l’annonce | Annonce approuvée par un administrateur | notify_author_on_approval |
ListingRejectedNotification |
Auteur de l’annonce | Annonce rejetée par un administrateur | notify_author_on_rejection |
NewMessageNotification |
Propriétaire de l’annonce | Nouveau message de contact reçu | notify_owner_on_new_message |
ListingReportedNotification |
Administrateurs | Annonce signalée par un utilisateur | notify_admin_on_report |
ListingExpiredNotification |
Propriétaire de l’annonce | L’annonce expire | notify_owner_on_expiration |
contact_email de l’annonce en utilisant le routage de notification à la demande.
Mise à jour
Il existe deux façons de mettre cet add-on à jour : via le panneau d’administration (recommandé) ou en remplaçant manuellement les fichiers.
Méthode 1 : Téléversement via le panneau d’administration (recommandé)
- Téléchargez le dernier fichier
.zipde cet add-on. - Allez dans Panneau d’administration → Add-ons et cliquez sur le bouton Téléverser.
- Sélectionnez ou faites glisser le fichier
.zipdans la zone de téléversement. - Une invite de confirmation affichera les numéros de version actuelle et nouvelle. Cliquez sur Remplacer pour continuer.
- Allez dans Panneau d’administration → Mise à jour du système (
/admin/update) pour appliquer les migrations de base de données en attente.
Méthode 2 : Remplacement manuel des fichiers
Étape 1 : Remplacer les fichiers
Remplacez le répertoire de l’add-on par la nouvelle version.
Étape 2 : Exécuter les migrations
php artisan migrate
Les migrations en attente ne s’exécutent qu’une seule fois : la commande peut être relancée sans risque.
Étape 3 : Vider les caches
php artisan config:clear
php artisan route:clear
php artisan view:clear
Étape 4 : Vérifier
Rendez-vous sur Admin → Petites annonces → Paramètres et confirmez que tous les paramètres sont intacts. Parcourez la page des petites annonces pour vérifier que les annonces s’affichent correctement.
Désinstallation
Éteindre un add-on sans rien perdre, c’est le désactiver : allez dans Panneau d’administration → Add-ons, trouvez Classified Ads et cliquez sur Désactiver.
- Ses routes, ses vues, ses entrées de menu d’administration et ses permissions cessent d’être enregistrées, et ses pages publiques ne répondent plus.
- Ses tables de base de données et toutes les données qu’elles contiennent sont conservées, et ses fichiers restent dans
extensions/addons/classified/. Rien n’est supprimé. - Le code d’achat enregistré lors de l’activation est conservé lui aussi : réactiver l’add-on ne le redemande pas.
- La désactivation est refusée tant qu’un autre add-on actif dépend de celui-ci : désactivez d’abord cet add-on.
Cliquez sur Activer sur la même carte pour le rallumer. Les migrations en attente sont rejouées, les assets republiés, et l’add-on reprend exactement là où il s’était arrêté.
Suppression
La suppression est définitive et détruit les données de l’add-on. Le bouton Supprimer n’apparaît que sur un add-on désactivé : la suppression se fait donc toujours en deux temps :
- Désactivez Classified Ads (voir Désinstallation).
- Cliquez sur Supprimer sur sa carte et confirmez la demande.
Le panneau d’administration, en une seule passe :
- exécute le hook de désinstallation de l’add-on, s’il en fournit un, tant que son code est encore sur le disque ;
- révoque les permissions déclarées dans son
addon.json; - annule ses migrations, ce qui supprime ses tables de base de données et toutes les lignes qu’elles contiennent, et purge ses entrées de la table
migrations, afin qu’une réinstallation ultérieure reparte de zéro ; - supprime ses assets publiés :
public/addons/classified/,public/vendor/classified/etstorage/app/public/addons/classified/; - supprime le dossier de l’add-on
extensions/addons/classified/; - supprime sa ligne dans la table
addons(le code d’achat enregistré disparaît avec elle) et vide le cache de l’application.
La suppression est refusée, avec un message explicatif et avant toute destruction, lorsque l’add-on est encore actif, lorsqu’un autre add-on actif en dépend, ou lorsque l’utilisateur du serveur web (PHP) ne peut pas supprimer extensions/addons/classified/. Dans ce dernier cas, donnez à cet utilisateur le droit d’écriture sur le dossier et sur son parent, puis réessayez.
Supprimer le dossier en FTP ou en SSH n’est pas équivalent : les tables de l’add-on, ses entrées dans la table migrations et sa ligne addons restent en place, et sa carte reste dans la liste. Utilisez plutôt Supprimer dans le panneau d’administration.
Dépannage
Les annonces ne sont pas visibles en front-end
Vérifiez que :
- Le statut de l’annonce est
published(et non draft, pending, expired, rejected ou sold). - La date
published_atest dans le passé. - La date
expires_atest soit null, soit dans le futur. - La navigation pour les visiteurs est activée si vous n’êtes pas connecté (vérifiez le paramètre
guest_browse).
Les utilisateurs ne peuvent pas créer d’annonces
- Assurez-vous que
allow_publishingest défini àtruedans les paramètres d’administration. - Vérifiez que l’utilisateur est authentifié (la création d’annonces nécessite une connexion).
- Vérifiez que le middleware
CheckPublishingEnabledne bloque pas l’accès.
Les champs personnalisés n’apparaissent pas dans le formulaire d’annonce
- Assurez-vous que le champ personnalisé est actif (
is_active = true). - Vérifiez que le champ est soit global (
category_id = null), soit assigné à la catégorie sélectionnée. - Consultez la console du navigateur pour repérer les erreurs AJAX sur l’endpoint
/api/classified/custom-fields/. - Assurez-vous que JavaScript est activé et que l’élément de sélection de catégorie déclenche l’appel AJAX.
Les annonces restent bloquées en “En attente de validation”
- La modération est activée par défaut. Allez dans Admin → Petites annonces → Annonces et approuvez les annonces en attente.
- Pour désactiver la modération, définissez
moderation_enabledàfalsedans les paramètres d’administration. Les nouvelles annonces seront publiées immédiatement.
Les notifications ne sont pas envoyées
- Vérifiez que le paramètre de notification correspondant est activé (ex.
notify_admin_on_new_listing). - Assurez-vous que votre configuration de messagerie est correcte dans
.env(SMTP, Mailgun, etc.). - Consultez le journal Laravel (
storage/logs/laravel.log) pour repérer les erreurs de messagerie. - Si l’annonce n’a pas d’utilisateur associé, assurez-vous que le
contact_emailest défini sur l’annonce pour la livraison de secours.
Les annonces expirées s’affichent toujours
- La méthode
expireOldListings()deClassifiedServicedoit être appelée pour mettre le statut à jour. Cela doit être planifié comme tâche cron ou commande artisan. - Les annonces dont
expires_atest dans le passé sont automatiquement exclues du scopeactive(), mais leur champ de statut n’est mis à jour que lorsque le processus d’expiration s’exécute.
Les images ne se téléversent pas
- Vérifiez les paramètres PHP
upload_max_filesizeetpost_max_size. - Vérifiez que le répertoire
storageest accessible en écriture. - Assurez-vous de ne pas avoir dépassé la limite
max_imagesconfigurée dans les paramètres d’administration.
Les compteurs d’annonces par catégorie sont incorrects
- Les compteurs d’annonces sont calculés dynamiquement via
withCount. Si les compteurs semblent obsolètes, videz le cache de l’application :php artisan cache:clear.
Le basculement sauvegarder/favoris ne fonctionne pas
- Assurez-vous que l’utilisateur est authentifié (la sauvegarde nécessite une connexion).
- Vérifiez que
enable_favoritesest défini àtruedans les paramètres d’administration. - Consultez la console du navigateur pour repérer les erreurs AJAX sur l’endpoint de basculement.
- Assurez-vous que le jeton CSRF est inclus dans les en-têtes de la requête.
Petites annonces v1.0.0 : fait partie de la plateforme CMS Larapen.
© BeDigit. Tous droits réservés.