En visitant ce site, vous acceptez l'utilisation de cookies afin de vous proposer les meilleurs services possibles.

[Résolu] trier par fournisseur

Plus d'informations
il y a 10 ans 11 mois #1 par ablaye90
trier par fournisseur a été créé par ablaye90
j'ai trouvé ce hack mais depuis lors trier pas fournisseur ne marche plus dans les catégories principales
voici le hack

After the setKeyWord function in \administrator\components\com_virtuemart\models\product.php place:

Code: [Select]

function untreeCat($vm_catid, &$ccont){
$db = JFactory::getDBO();
$query = 'SELECT `category_child_id` FROM `#__virtuemart_category_categories` WHERE `category_parent_id`="'.$vm_catid.'"';
$db->setQuery($query);
$db->query();

$rows = $db->loadRowList();
if (empty($rows)) {
return;
} else {
foreach($rows as $row) {
array_push($ccont, $row[0]);
$kat = $row[0];
$this->untreeCat($kat, $ccont);
}
}
}


Then search for this:

Code: [Select]

if ($virtuemart_category_id > 0) {
$joinCategory = TRUE;
$where[] = ' `pc`.`virtuemart_category_id` = ' . $virtuemart_category_id;
}


... and replace it with following:

Code: [Select]

if ($virtuemart_category_id > 0){
$joinCategory = TRUE ;
$catscont = array();
$this->untreeCat($virtuemart_category_id, $catscont);
$qkat = ' `pc`.`virtuemart_category_id` IN('.$virtuemart_category_id;
foreach ($catscont as &$kat){
$qkat .= ', '.$kat;
}
$qkat .= ')';
$where[] = $qkat;
}

Connexion ou Créer un compte pour participer à la conversation.

  • studio42
  • Portrait de studio42
  • Hors Ligne
  • Modérateur
  • Modérateur
  • Dev Joomla & Virtuemart
Plus d'informations
il y a 10 ans 11 mois - il y a 10 ans 11 mois #2 par studio42
Réponse de studio42 sur le sujet trier par fournisseur
Il y a déja une chose "étrange".
Pourquoi loadRowList pour une seule colonne ?
alors que cela est plus simple et plus clair :
function untreeCat($vm_catid, &$ccont){
	$db = JFactory::getDBO();
	$query = 'SELECT `category_child_id` FROM `#__virtuemart_category_categories` WHERE `category_parent_id`="'.$vm_catid.'"';
	$db->setQuery($query);
	$db->query();

	if ($rows = $db->loadColumn()) {
		foreach($rows as $row) {
			$ccont[] = $row;
			$this->untreeCat($row, $ccont);
		}
	}
}
Le mieux serais même de faire une requete IN pour les sous catégorie car là, vous avez une requte pour chaque enfant.


le code
foreach ($catscont as &$kat){
$qkat .= ', '.$kat;
}
mieux :
$qkat .= ','.implode(',',$catscont );

Pour le problême du tri par fournisseur, avez vous une page blanche, une erreur ou le tri n'est pas bon ?

www.st42.fr Truc et astuce Joomla et virtuemart
shop.st42.fr téléchargement Joomla et extension pour virtuemart
Gratuit ! Nettoyage des medias : shop.st42.fr/fr/produits/virtuemart-netoyage-des-medias.htm Nouveau!
Dernière édition: il y a 10 ans 11 mois par studio42.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 11 mois #3 par ablaye90
Réponse de ablaye90 sur le sujet trier par fournisseur
cette modification à pour but de montrer les produits des catégories enfants au niveau de la catégorie principale.
apres cette modification la liste de défilement trier par marque ne fonction pas

mossane.com/fr/maquillage/teint.html

THX

Connexion ou Créer un compte pour participer à la conversation.

  • studio42
  • Portrait de studio42
  • Hors Ligne
  • Modérateur
  • Modérateur
  • Dev Joomla & Virtuemart
Plus d'informations
il y a 10 ans 11 mois #4 par studio42
Réponse de studio42 sur le sujet trier par fournisseur
Le problème est que selon le type de requête et la version de Virtuemart, la requête diffère.

Pouvez vous fournir votre version actuelle de virtuemart que je puisse vérifier?

www.st42.fr Truc et astuce Joomla et virtuemart
shop.st42.fr téléchargement Joomla et extension pour virtuemart
Gratuit ! Nettoyage des medias : shop.st42.fr/fr/produits/virtuemart-netoyage-des-medias.htm Nouveau!

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 11 mois #5 par ablaye90
Réponse de ablaye90 sur le sujet trier par fournisseur
vm 2.6.6

merci

Connexion ou Créer un compte pour participer à la conversation.

  • studio42
  • Portrait de studio42
  • Hors Ligne
  • Modérateur
  • Modérateur
  • Dev Joomla & Virtuemart
Plus d'informations
il y a 10 ans 11 mois - il y a 10 ans 11 mois #6 par studio42
Réponse de studio42 sur le sujet trier par fournisseur
Bonjour,
Voici une solution qui devrait fonctionner :

Ajouter la fonction(ou modifier dans votre cas) :
function untreeCat($catids){
	$this->subcat_ids+=$catids;
	$db = JFactory::getDBO();
	$query = 'SELECT `category_child_id` FROM `#__virtuemart_category_categories` WHERE `category_parent_id` in ('.implode(',',$catids ).')';
	$db->setQuery($query);
	$db->query();
 
	if ($rows = $db->loadColumn()) {
		$this->untreeCat($rows);
	}
}

remplacez
if ($virtuemart_category_id > 0) {
				$joinCategory = TRUE;
				$where[] = ' `pc`.`virtuemart_category_id` = ' . $virtuemart_category_id;
			}
par
if ($virtuemart_category_id > 0) {
				$joinCategory = TRUE ;
				$this->subcat_ids = array();
				$this->untreeCat(array($virtuemart_category_id));
				$where[] = ' `pc`.`virtuemart_category_id` IN ('.implode(',',$this->subcat_ids).')';
			}

remplacez dans la fonction getOrderByList (environ ligne 2154):
if ($virtuemart_category_id) {
				$query .= ' AND c.`virtuemart_category_id` =' . (int)$virtuemart_category_id;
			}
par
if ($virtuemart_category_id) {
		$where[] = 'AND  `c`.`virtuemart_category_id` IN ('.implode(',',$this->subcat_ids).')';
	}

Déja ce code divise par 10 les requêtes en BDD. Donc le temps d’exécution et le faite d'utiliser $this->subcat_ids, vous n'avez pas besoin de refaire la requête pour les fabricants.

Attention je n'ai pas tout vérifier. Mais a 95% cela doit fonctionner, je vais pas faire tout votre TAF ;)

www.st42.fr Truc et astuce Joomla et virtuemart
shop.st42.fr téléchargement Joomla et extension pour virtuemart
Gratuit ! Nettoyage des medias : shop.st42.fr/fr/produits/virtuemart-netoyage-des-medias.htm Nouveau!
Dernière édition: il y a 10 ans 11 mois par studio42. Raison: Double Typo
Les utilisateur(s) suivant ont remercié: ablaye90

Connexion ou Créer un compte pour participer à la conversation.