VirtueMart Forum

VirtueMart 2 + 3 + 4 => Plugins: Payment, Shipment and others => Topic started by: fcplpl on October 19, 2021, 09:32:42 AM

Title: How to call functions plgVmOnAddToCart
Post by: fcplpl on October 19, 2021, 09:32:42 AM
Hi,

VM 2, J2.5

This is my first plugin - Tracking code

Plugin works fine

My question is:

How do I display functions on the screen -> plgVmConfirmedOrder? How do I check if it works?

I cannot and do not know how to do it to see the result for the test version functions plgVmConfirmedOrder

Please Help Me.

My code:

defined('_JEXEC') or die('Restricted access');

defined('DS') or define('DS', DIRECTORY_SEPARATOR);

class plgSystemEcommerceVmHomebook extends JPlugin {

function onAfterDispatch(){

$app = JFactory::getApplication();

   if ($app->getName() != 'site' ) {
      return true;
   }

function plgEcommerceHomebook(&$subject, $config)
    {
      parent::__construct($subject, $config);
      $this->_plugin = JPluginHelper::getPlugin('system', 'EcommerceVmHomebook');
      $this->_params = new JParameter($this->_plugin->params);
   }
   
$code = $this->params->get('code', '');
$affiliation = $this->params->get('affiliation', '');
$anonymization = $this->params->get('anonymization', '');

$input = JFactory::getApplication()->input;
       
$extension_name = $input->get('option', '', 'cmd');
$view = $input->get('view', '', 'cmd');
$task = $input->get('task', '', 'cmd');

if (!class_exists( 'VmConfig' )) require(JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'helpers'.DS.'config.php');
VmConfig::loadConfig();

if (!class_exists('CurrencyDisplay'))
require(JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'helpers'.DS.'currencydisplay.php');
$currency = CurrencyDisplay::getInstance();

$doc = JFactory::getDocument();

if(!$task=='confirm'){

$scripts_ga = "

!function(d,m,e,v,n,t,s){d['DomodiTrackObject'] = n;
   d[n] = window[n] || function() {(d[n].queue=d[n].queue||[]).push(arguments)},
   d[n].l = 1 * new Date(), t=m.createElement(e), s=m.getElementsByTagName(e)[0],
   t.async=1;t.src=v;s.parentNode.insertBefore(t,s)}(window,document,'script',
   'https://pixel.wp.pl/w/tr.js','dmq');
   dmq('init', '$code');
           
";

$doc->addScriptDeclaration($scripts_ga);

}

if ($extension_name == 'com_virtuemart' && 'productdetails' == $view){
       
$category_id = $input->get('virtuemart_category_id', '');
$product_id = $input->get('virtuemart_product_id', '');

if (!class_exists('CurrencyDisplay'))
require(VMPATH_ADMIN . DS . 'helpers' . DS . 'currencydisplay.php');
$currency = CurrencyDisplay::getInstance();
      
$productModel= VmModel::getModel('product');
$product = $productModel->getProduct($product_id);

$categoryModel = VmModel::getModel('category');
$category = $categoryModel->getCategory($category_id);

$product_prices = round($product->prices['salesPrice']);

if ($product->virtuemart_product_id == $product_id) {

$scripts_detail = "
dmq('track', 'ViewContent', {
content_type: 'product',
id:'$product->virtuemart_product_id',
name:'$product->product_name',
content_category:'$category->category_name',
price:$product_prices,
in_stock: true
});

";

$doc->addScriptDeclaration($scripts_detail);

}       

}

function plgVmConfirmedOrder($cart, $order) {

echo "confirm order event";
die();

}
Title: Re: How to call functions plgVmOnAddToCart
Post by: GJC Web Design on October 19, 2021, 11:59:12 AM
you've got syntax errors .. unclosed functions and your

function plgVmConfirmedOrder($cart, $order) {

echo "confirm order event";
die();

}

is not inside the class

if all correct it should successfully die and display the echo when plgVmConfirmedOrder($cart, $order) is triggered
Title: Re: How to call functions plgVmOnAddToCart
Post by: fcplpl on October 19, 2021, 12:54:04 PM
.....

function plgVmConfirmedOrder($cart, $order) {

echo "confirm order event";
die();

}

}

}

I have the code corrected.

I don't know where this function should appear? Concole, VM Administrator, Log system, etc... ?

I don't know how to check. Just getting started, I want to know how to see the code for this function
Title: Re: How to call functions plgVmOnAddToCart
Post by: GJC Web Design on October 19, 2021, 13:04:48 PM
just search the VM files for the function e.g. plgVmConfirmedOrder -- probably in the orders model

this is triggered when an order is confirmed either by a payment plugin or manually in admin
Title: Re: How to call functions plgVmOnAddToCart
Post by: fcplpl on October 19, 2021, 13:24:18 PM
I found in

administrator/.../models/orders.php

$returnValues = $dispatcher->trigger('plgVmConfirmedOrder', array($cart, $order));

unfortunately I don't know how I can call a function to see the result on the screen.

Please give me an example
Title: Re: How to call functions plgVmOnAddToCart
Post by: GJC Web Design on October 19, 2021, 16:51:39 PM
 afaik this trigger is only enabled for payment plugins and triggered from the admin function  CreateOrderHead()

      VmConfig::importVMPlugins('vmpayment');

      $cart = VirtueMartCart::getCart();
      $returnValues = $dispatcher->trigger('plgVmConfirmedOrder', array($cart, $order));

I always use plgVmOnUpdateOrderPayment ($data,$old_order_status) for confirmed orders

I think there is a list of triggers on the forum here somewhere or just search VM for   plgVm

Title: Re: How to call functions plgVmOnAddToCart
Post by: fcplpl on October 20, 2021, 13:27:05 PM
Thank you for your help.
Everything is already working