Action de masse comment récupérer les valeurs

  • Posts: 75
  • Thank you received: 2
  • Hikashop Essential
7 months 8 hours ago #360490

-- HikaShop version -- : 5.0.4
-- Joomla version -- : 4.4.4
-- PHP version -- : 8.0.36
-- Browser(s) name and version -- : Firefox 125.0.2 (64 bits)

Bonjour.
Je lis ici qu'il n'est pas possible d'utiliser l'action d'envoi de mail et transmettre des données relatives à une commande ou à un client.
Par contre, vous mentionnez qu'avec l'action "run PHP code", on a accès aux données de la commande avec des tags. Où peut-on trouver ces tags ?
Je ne les ai pas trouvés dans la doc www.hikashop.com/support/documentation/1...s-action-plugin.html
Merci d'avance de votre aide. Cdt.

Please Log in or Create an account to join the conversation.

  • Posts: 4747
  • Thank you received: 644
  • MODERATOR
7 months 2 hours ago #360492

Bonjour,

Dans la partie preload version, vous trouverez le code php et où

$texts = array(
	...
	'MAIL_HEADER' => JText::_('HIKASHOP_MAIL_HEADER'),
	'TPL_HEADER_TEXT' => JText::_('HIKASHOP_MAIL_HEADER'),
	'USER_ACCOUNT' => (bool)@$customer->user_cms_id,
	'PRODUCT_NAME' => JText::_('CART_PRODUCT_NAME'),
...
=> Il vous permet de définir des données dans votre tag, qui seront utilisées en version Html comme ceci par exemple :
<td style="border-bottom:1px solid #ddd;padding-bottom:3px;text-align:right">{LINEVAR:PRODUCT_PRICE}</td>

J'espère que ceci vous aidera.
Cordialement

Last edit: 6 months 4 weeks ago by Philip.

Please Log in or Create an account to join the conversation.

  • Posts: 75
  • Thank you received: 2
  • Hikashop Essential
6 months 4 weeks ago #360539

Merci beaucoup pour votre réponse.
Désolé, je ne trouve pas de Preload version. J'ai regardé dans les fichiers AcyMailing pour le preload, HIKASHOP_MAIL_HEADER et PRODUCT_PRICE mais je ne trouve pas donc je ne sais pas où chercher le code php.

Last edit: 6 months 4 weeks ago by Philip.

Please Log in or Create an account to join the conversation.

  • Posts: 4747
  • Thank you received: 644
  • MODERATOR
6 months 4 weeks ago #360540

Bonjour,

Pouvez vous préciser quel email vous chercher à customiser?
Je faisai réferences aux emails d'HikaShop, ici :
- A partir de la page de Configuration d'HikaShop d'HikaShop (components => HikaShop => Configuration)
- System dropdown => Emails
- Vous verez alors le listing des emails :



Note : Je me suis permis de retraduire les message du forum, car je vous ai répondu par erreur en Anglais (l'habitude...).
Cordialement

Last edit: 6 months 4 weeks ago by Philip.

Please Log in or Create an account to join the conversation.

  • Posts: 75
  • Thank you received: 2
  • Hikashop Essential
6 months 4 weeks ago #360544

je comprends bien la raison des alternances FR-EN ;-)

Dans mon premier message ci-dessus, je fais uniquement référence aux Actions de masse. Il est possible d'envoyer un courriel après une commande et j'aimerais pouvoir récupérer l'adresse électronique des acheteurs sur un produit précis. J'ai donc une action en fonction d'un product_id et paramétré l'action d'envoyer un courriel dans lequel j'ai inscrit "{user_email} [user_email]" dans le champ "Données pour le contenu" et je reçois un courriel avec ces 2 balises et pas du tout l'adresse électronique souhaité.

Dans le fil de discussion auquel je fais référence dans mon premier message, vous indiquez que cette action ne permet pas d'insérer des données relatives aux commandes ou aux clients, mais qu'il faut utiliser l'action de masse "run PHP code". Et c'est pour cette action que je pose la question d'où trouver les balises permettant de remonter l'adresse électronique du client.

Please Log in or Create an account to join the conversation.

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
6 months 4 weeks ago #360545

Bonjour,

Depuis les messages du sujet auquel vous faites référence, nous avons ajouté la capacité à utiliser des tags dans le body de l'email que vous remplissez dans l'action de masse.
Par contre, cela ne fonctionne qu'avec les données directement dans la table hikashop_order.
Par exemple, si vous voulez le numéro de commande vous pouvez utiliser {order_number} dans le body de l'email.
Donc il n'est pas possible d'utiliser un tag pour l'email de l'utilisateur vu que cette information n'est pas stockée dans hikashop_order.

Pour aller plus loin dans la personnalisation, je vous recommande d'éditer l'email "massaction notification" via le menu Système>Emails.
Là, dans l'HTML, vous pouvez utiliser du code PHP comme ceci:

<?php
$userClass = hikashop_get('class.user');
foreach($data->elements as $order) {
 $user = $userClass->get($order->order_user_id);
 echo $user->user_email;
}
?>
Notez qu'une action de masse peut traiter plusieurs commandes d'un coup. Dans tous les cas, un seul email sera envoyé. D'où le foreach car il peut y avoir plusieurs commandes.

Please Log in or Create an account to join the conversation.

  • Posts: 75
  • Thank you received: 2
  • Hikashop Essential
6 months 3 weeks ago #360707

Bonjour et merci de ces infos !
Merci beaucoup pour le code, je vais le tester lors de la prochaine commande !
Est-ce que la modification suivante vous paraît adéquate : $texts = array('EMAIL_BODY' => $user->user_email);
Manifestement, je n'ai pas accès avec HikaShop Essential à la modification des emails, hormis via FTP dans media/com_hikashop/mail

Please Log in or Create an account to join the conversation.

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
6 months 3 weeks ago #360708

Bonjour,

Juste cette ligne ? Non. $user n'existe pas dans le preload de l'email.
Il faut d'abord charger cette variable, comme je le fait dans le code que j'ai fourni dans mon précédent message.

Please Log in or Create an account to join the conversation.

  • Posts: 75
  • Thank you received: 2
  • Hikashop Essential
6 months 3 weeks ago #360717

Pardon, mon message a été tronqué. En effet, j'ai ajouté tout votre code mais modifié uniquement la dernière ligne, demandant si la modification est correcte.

Please Log in or Create an account to join the conversation.

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
6 months 3 weeks ago #360718

Ah ok.
Dans ce cas, le code est ok si vous placez le code à la fin du preload.

Please Log in or Create an account to join the conversation.

  • Posts: 75
  • Thank you received: 2
  • Hikashop Essential
6 months 5 days ago #361082

Voici le code dans le fichier /media/com_hikashop/mail/massaction_notification.preload.php :

<?php
/**
 * @package	HikaShop for Joomla!
 * @version	5.0.4
 * @author	hikashop.com
 * @copyright	(C) 2010-2024 HIKARI SOFTWARE. All rights reserved.
 * @license	GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
 */
defined('_JEXEC') or die('Restricted access');
?><?php
global $Itemid;
$url_itemid = '';
if(!empty($Itemid)) {
	$url_itemid = '&Itemid=' . $Itemid;
}

if(!isset($data)){
	$data = array('type' => '');
}elseif(!is_array($data)){
	$data = array($data);
}
if(!isset($data['type'])){
	$data['type'] = '';
}
 $userClass = hikashop_get('class.user');
foreach($data->elements as $order) {
 $user = $userClass->get($order->order_user_id);}
switch($data['type']){
	case 'csv_export':
		$texts = array(
			'EMAIL_BODY' => JText::sprintf('MASS_CSV_EMAIL_BODY',hikashop_getDate(time()))
		);
		break;
	case 'product_notification':
		if($data['action']['bodyData'] == 'product_listing'){
			$productClass = hikashop_get('class.product');
			$texts = array(
				'EMAIL_BODY' => JText::_('MASS_CUSTOM_EMAIL_BODY')
			);
			$cids = array();
			foreach($data['elements'] as $item) {
				$cids = $item->product_id;
			}
			$productClass->getProducts($cids);
			$cartProducts = array();
			foreach($productClass->products as $item) {
				$cartProducts[] = array(
					'PRODUCT_NAME' => $item->product_name,
					'PRODUCT_PRICE' => $item->prices[0]->price_value,
					'PRODUCT_QUANTITY' => $item->product_quantity
				);
			}
			$templates = array();
			$templates['PRODUCT_LINE'] = $cartProducts;
			if(!empty($cids)){
				$vars = array(
					'product_listing' => 1
				);
			}else{
				$vars = array(
					'product_listing' => 0
				);
			}
		}elseif(!empty($data['action']['bodyData'])){
			$texts = array(
				'EMAIL_BODY' => JText::_($data['action']['bodyData'])
			);
		}else{
			$texts = array(
				'EMAIL_BODY' => JText::_('MASS_NOTIFICATION_PRODUCT_EMAIL_BODY')
			);
		}
		break;
	case 'address_notification':
			$texts = array(
				'EMAIL_BODY' => JText::_('MASS_NOTIFICATION_ADDRESS_EMAIL_BODY')
			);
		break;
	case 'category_notification':
			$texts = array(
				'EMAIL_BODY' => JText::_('MASS_NOTIFICATION_CATEGORY_EMAIL_BODY')
			);
		break;
	case 'order_notification':
 $texts = array('EMAIL_BODY' => $user->user_email);
			$texts = array(
				'EMAIL_BODY' => JText::_('MASS_NOTIFICATION_ORDER_EMAIL_BODY')
			); $texts = array('EMAIL_BODY' => $user->user_email);
		break;
	case 'user_notification':
			$texts = array(
				'EMAIL_BODY' => JText::_('MASS_NOTIFICATION_USER_EMAIL_BODY')
			);
		break;
	default :
		$texts = array(
			'EMAIL_BODY' => JText::sprintf('PLEASE_CHECK_MASS_SETTINGS',hikashop_getDate(time()))
		);
		break;
}
Mais le courriel de notification est vide. Je pensais qu'en ajoutant $texts = array('EMAIL_BODY' => $user->user_email); ça allait remplacer MASS_NOTIFICATION_ORDER_EMAIL_BODY mais comme cette chaîne apparaissait toujours dans la notification, je l'ai ajoutée après et maintenant le courriel est vide.
J'ai mis le code $user->user_email dans la tâche d'action de masse et je le reçois tel quel dans le courriel de notification.

Comment faire ?

Please Log in or Create an account to join the conversation.

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
6 months 5 days ago #361083

Bonjour,

Je vous recommande de supprimer les modifications que vous avez faites dans le preload.
A la place, faites la modification dont je parlais, dans le HTML de l'email:
www.hikashop.com/forum/5-support-en-fran...-valeurs.html#360545

Please Log in or Create an account to join the conversation.

  • Posts: 75
  • Thank you received: 2
  • Hikashop Essential
6 months 5 days ago #361096

Bonjour,
Merci de ces précisions ! Je m'étais basé sur ce message www.hikashop.com/forum/5-support-en-fran...-valeurs.html#360718 pour l'introduire en début du fichier preload.
Je récapitule :
1. j'ai remis le fichier preload initial
2. j'ai ajouté tout le code au début du fichier massaction_notification.html.php (juste après "defined('_JEXEC') or die('Restricted access');")

2 questions à ce stade :
- la ligne "echo ..." a-t-il sa place ici ?
- que dois-je mettre dans l'action de masse ?

Merci infiniment pour toute l'aide !

Please Log in or Create an account to join the conversation.

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
6 months 5 days ago #361098

Hi,

1. Oui, le echo permet de faire l'affichage dans l'email. Je recommande de mettre le code juste après le tag {TXT:EMAIL_BODY}

2. Dans l'action, vous voulez juste renseigner votre adresse email dans l'option "to address". Vous pouvez mettre le texte que vous voulez dans le sujet et le body. Le texte du body sera rajouté à l'email de notification.

Please Log in or Create an account to join the conversation.

Time to create page: 0.085 seconds
Powered by Kunena Forum