VirtueMart Forum

VirtueMart 2 + 3 + 4 => General Questions => Topic started by: smarmellow on December 09, 2016, 18:57:26 PM

Title: VM3 addthis buttons disappears when go to a neighbour prev next link[SOLVED]
Post by: smarmellow on December 09, 2016, 18:57:26 PM
Hello, i searched this all the day, and nothing. :'(
I have addthis buttons on detail product page, when i go to a neighbour product by links "prev" "next" the social buttons disappears.
I have read this https://forum.virtuemart.net/index.php?topic=61918.0 but is for vm1.

Someone has the same issue? how have you solved?

Thanks!!!

vm3, joomla 3.6.4. , flatize template
Title: Re: VM3 addthis buttons disappears when go to a neighbour prev next link
Post by: GJC Web Design on December 09, 2016, 21:41:05 PM
would assume the JS isn't being loaded when you ajax refresh the details page..

see at the bottom of the productdetails default.php how JS should be handled
Title: Re: VM3 addthis buttons disappears when go to a neighbour prev next link
Post by: smarmellow on December 10, 2016, 14:59:46 PM
hello, thanks for the answer!

i'm in contact with addthis team, they sent me that:
"It sounds like your pages are loading dynamically with JavaScript when you are clicking Next/Prev, rather than being fully loaded from the server each time. In order to correct this, you'll need to call addthis.layers.refresh() upon content changes.

https://www.addthis.com/academy/using-dashboard-configuration-tools-dynamically/ "

i don't know js and i don't know whats going on here. :o

Can you help me to adapt this script to my virtuemart files?

Title: Re: VM3 addthis buttons disappears when go to a neighbour prev next link
Post by: smarmellow on December 10, 2016, 17:15:24 PM
I managed to make it work, but, now i have a blank page when i go tu domain.xx/administrator.

i added this:
:function loadDynamicContent() {
    // Code that will load the dynamic content

    // Once that's all done, call addthis.toolbox()
    addthis.toolbox('.addthis_toolbox')
}


at the end of my jquery.min.js file

now the code is:
/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */
!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(.....

........................

.......:(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=mc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=mc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({
padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=oc),b&&a.jQuery===n&&(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n});:function loadDynamicContent() {
    // Code that will load the dynamic content

    // Once that's all done, call addthis.toolbox()
    addthis.toolbox('.addthis_toolbox')
}


if i delete the new added code the administrator page displays correctly, but the addthis buttons issue turns again.
Title: Re: VM3 addthis buttons disappears when go to a neighbour prev next link
Post by: GJC Web Design on December 10, 2016, 21:08:38 PM
as I said->

would assume the JS isn't being loaded when you ajax refresh the details page..

see at the bottom of the productdetails default.php how JS should be handled
Title: Re: VM3 addthis buttons disappears when go to a neighbour prev next link
Post by: smarmellow on December 11, 2016, 13:34:03 PM
i gave a look at the bottom of the default.php and i found this script
<script>

// GALT

/*

* Notice for Template Developers!

* Templates must set a Virtuemart.container variable as it takes part in

* dynamic content update.

* This variable points to a topmost element that holds other content.

*/

// If this <script> block goes right after the element itself there is no

// need in ready() handler, which is much better.

//jQuery(document).ready(function() {

Virtuemart.container = jQuery('.productdetails-view');

Virtuemart.containerSelector = '.productdetails-view';

//Virtuemart.container = jQuery('.main');

//Virtuemart.containerSelector = '.main';

//});



// Open print and manufacturer link to Modal window

  <?php if(VmConfig::get('usefancy',1)) : 

  $manulink JRoute::_('index.php?option=com_virtuemart&view=manufacturer&virtuemart_manufacturer_id=' $this->product->virtuemart_manufacturer_id[0] . '&tmpl=component'FALSE);

  ?>


  jQuery('a.printModal').click(function(e){

  jQuery.fancybox({

href: '<?php echo $link.'&print=1'?>',

                type: 'iframe',

                height: '500'

  });

                  e.preventDefault();

  });



  jQuery('a.manuModal').click(function(e){

   jQuery.fancybox({

href: '<?php echo $manulink ?>',

                type: 'iframe'

  });

              e.preventDefault();

  });

 

  <?php else : 

  $manulink JRoute::_('index.php?option=com_virtuemart&view=manufacturer&virtuemart_manufacturer_id=' $this->product->virtuemart_manufacturer_id[0] . '&tmpl=component'FALSE);

  ?>




  jQuery('a.printModal').click(function(e){

  jQuery.facebox({

iframe: '<?php echo $link.'&print=1'?>',

rev: 'iframe|550|550'

  });

          e.preventDefault();

  });



  jQuery('a.manuModal').click(function(e){

jQuery.facebox({

iframe: '<?php echo $manulink?>',

rev: 'iframe|550|550'

});

        e.preventDefault();

      });

     

  <?php endif; ?>

 

   

</script>


i have no knowledge of js and php, what i have to do here?
Title: Re: VM3 addthis buttons disappears when go to a neighbour prev next link
Post by: GJC Web Design on December 11, 2016, 16:33:57 PM
you have to load your addto js there like u tried to do by hacking the main jquery file
Title: Re: VM3 addthis buttons disappears when go to a neighbour prev next link[SOLVED]
Post by: smarmellow on December 12, 2016, 10:37:55 AM
YESSS! Now it works! Thanks very much for your support!

For all of you interested in how to solve this:


at the bottom of your template file just above </body> paste

<script type="text/javascript">
var addthisScript = document.createElement('script');
addthisScript.setAttribute('src', 'http://s7.addthis.com/js/300/addthis_widget.js#pubid=ra-XXXXXXXXXXX')
document.body.appendChild(addthisScript)
</script>


in yourtemplate/html/com_virtuemart/productdetails/default.php paste your buttons div in the position you want they appeare. In my case just below the product image before all other informations

    <?php

$count_images count ($this->product->images);

if ($count_images 1) {

echo $this->loadTemplate('images_additional');

}




?>



<!-- SOCIAL links -->

   <div class="my-social-links">

     <!-- Go to www.addthis.com/dashboard to customize your tools --> <div class="addthis_inline_share_toolbox"></div>

   </div>   

<!-- SOCIAL links end-->

   

    </div>
   

<div class="col-sm-7">



<?php

            
// Product Navigation

            
if (VmConfig::get('product_navigation'1)) {

            
?>


Last thing to do is paste the function

function loadDynamicContent() {
    // Code that will load the dynamic content

    // Once that's all done, call addthis.toolbox()
    addthis.toolbox('.addthis_toolbox')
}


at the bottom of default.php file like this:

<script>

// GALT

/*

* Notice for Template Developers!

* Templates must set a Virtuemart.container variable as it takes part in

* dynamic content update.

* This variable points to a topmost element that holds other content.

*/

// If this <script> block goes right after the element itself there is no

// need in ready() handler, which is much better.

//jQuery(document).ready(function() {

Virtuemart.container = jQuery('.productdetails-view',):function loadDynamicContent() {
    // Code that will load the dynamic content

    // Once that's all done, call addthis.toolbox()
    addthis.toolbox('.addthis_toolbox')
};

Virtuemart.containerSelector = '.productdetails-view';

//Virtuemart.container = jQuery('.main');

//Virtuemart.containerSelector = '.main';

//});
...