0

I have 2 options user can change on page made in modx rev 2.2.0
* background
* font-size

To change background and font size i used jquery, so i think the best way would be use ajax. So i would have to create 1/2 pages which add those variables to session, so if user go to a different page, background and font size stay the same. And if user visit page after few days, background and font size would stay the same.

Here is my javascript code:

<script type="text/javascript">
 $(document).ready(function () {
  background5();
    var originalFontSize = $('html').css('font-size');
 });

 function background1() { $('.wrap').css("background","url(assets/templates/default/images/bg1.jpg)"); return false; }
 function background2() { $('.wrap').css("background","url(assets/templates/default/images/bg2.jpg)"); return false; }
 function background3() { $('.wrap').css("background","url(assets/templates/default/images/bg3.png)"); return false; }
 function background4() { $('.wrap').css("background","url(assets/templates/default/images/bg4.jpg)"); return false; }
 function background5() { $('.wrap').css("background","url(assets/templates/default/images/bg5.jpg)"); return false; }
 function background6() { $('.wrap').css("background","url(assets/templates/default/images/bg6.jpg)"); return false; }
 function background7() { $('.wrap').css("background","url(assets/templates/default/images/bg7.jpg)"); return false; }
 function background8() { $('.wrap').css("background","url(assets/templates/default/images/bg8.jpg)"); return false; }
 function background9() { $('.wrap').css("background","url(assets/templates/default/images/bg9.jpg)"); return false; }
 function big_font() {
  var currentFontSize = $('html').css('font-size');
  var currentFontSizeNum = parseFloat(currentFontSize, 10);
  var newFontSize = currentFontSizeNum*1.1;
  $('html').css('font-size', newFontSize);
  return false;
 }
 function small_font() {
  var currentFontSize = $('html').css('font-size');
  var currentFontSizeNum = parseFloat(currentFontSize, 10);
  var newFontSize = currentFontSizeNum*0.9;
  $('html').css('font-size', newFontSize);
  return false;
 }
</script>

My question is how to add variables to session in modx, and what is the best way of doing this?

miszczu
  • 1,179
  • 4
  • 19
  • 39

1 Answers1

1

Create a resource to be used as an Ajax stub, and on it place an uncached snippet containing your 'add to session' code. The snippet could be as simple as:

<?php
// example only, be sure to sanitize and add some sensible defaults here
$background = $_POST['background'];
$fontSize   = $_POST['font_size'];

// write to user's session
$_SESSION['background'] = $background;
$_SESSION['fontSize'] = $fontSize;

return '';

Then use jQuery to create an Ajax call to the stub, passing the background and font_size params to it:

var background = 6,
    fontSize = 2;
// let's assume your Ajax stub resource id is 7
$.post("[[~7]]", { background: background, font_size: fontSize } );

Note: you could tidy up all those background() functions by using just one, something like this:

function background(n) {
    var url = "assets/templates/default/images/bg"+parseInt(n)+".jpg";
    $('.wrap').css("background","url("+url+")"); 
    return false; 
}
okyanet
  • 3,106
  • 1
  • 22
  • 16