We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 30672
    • 180 Posts
    Hi !

    Does someone use CSS Foundation ?

    i've been using it four 3 different websites by now, it's really cool ! smiley

    i would like to use their navigation system. Does someone has allready done it ?

    thanks !
      • 10208 ☆ A M B ☆
      • 1,780 Posts
      There's an example in the Flexibility package. Put it into a fresh install to pick it apart (includes resources which could overwrite existings).

        Frogabog- MODX Websites in Portland Oregon
        "Do yourself a favor and get a copy of "MODX - The Official Guide" by Bob Ray. Read it.
        Having server issues? These guys have MODX Hosting perfected - SkyToaster
        • 30672
        • 180 Posts
        hi !
        Thank you, i will have a look !
          • 30672
          • 180 Posts
          ok, i found this for the wayfinder call :

          [[!Wayfinder? &startId=`0` &rowTpl=`rowTpl` &innerTpl=`innerTpl` &outerTpl=`outerTpl` &outerClass=`nav-bar` &innerClass=`flyout` &parentClass=`has-flyout`]]

          but there are missing chunks (outerTpl,...)

          i will install the package on a new modx install to see more details.
            • 30672
            • 180 Posts
            ok i did install the package on a plain modx 2.2.5 version.
            the menu doesn't work at all.

            and i see that there is a new top-bar element on foundation css, that is not present in flexibility.

            i will have to dig it. and maybe contact the author of flexibility.
              • 10208 ☆ A M B ☆
              • 1,780 Posts
              I had an issue with this menu, no dropdowns and I could find nothing to fix it. It worked in all my other test installs though so I knew it would. Re-installing Flexibility is not possible without wreaking havoc on the site, and the problem was clearly in the database somewhere. I ended up dumping everything, including MODX and the database, then re-installing MODX and Flexibility. It works now. I'm manually copying everything from the db tables to re-create the site. I don't trust the old tables. I lost all my users and permissions, and am starting from scratch with those as well. I think what you've got is a gorked install of either MODX or Flexibility, or both.

              The outerTpl is defaulted I think. I couldn't find it either, and creating one didn't help. But the main_nav portion of Foundation.css has all the stuff you want. The foundation.css file can be replaced with the one from Foundation, but I don't think it's any different. I actually uploaded all new Foundation files into the Flexibility template folders, nothing changed.

              I'd try again on another test MODX install, I bet it'll work (or dump your existing, install 2.2.5 and try with that). I think it's something to do with the way the packages install, but I don't know for sure. I've used Flexibility since the initial release, and occasionally a chunk or TV doesn't get installed but that hasn't happened since 2 or 3 releases ago.

              On the site I'm working with right now, all seems well and the menu works great. I upgraded to 2.2.5 last night without issues. The only problem I'm seeing is that when children are hidden, the menu still shows the down arrow button. I need to figure out how to tell Wayfinder not to add has-flyout to the menu when children are hidden. huh

              I have a fix for a couple issues with the orbit slider, if you need it. One will keep the other images from showing through when they're different sizes and load a clear background, the other centers said multi-sized images. And the page lightbox doesn't work with cached chunks or snippets, so make sure to call those uncached in the lightbox TV if you use it. Let me know.
                Frogabog- MODX Websites in Portland Oregon
                "Do yourself a favor and get a copy of "MODX - The Official Guide" by Bob Ray. Read it.
                Having server issues? These guys have MODX Hosting perfected - SkyToaster
                • 30672
                • 180 Posts
                thank you for your answer !

                i will contact the author, to have more infos about the bugs.
                i will post here if i get answers.
                  • 30672
                  • 180 Posts
                  you can post your tricks here also, for everybody ! smiley

                  (are we in the good section of the forum by the way?)
                    • 10208 ☆ A M B ☆
                    • 1,780 Posts
                    Orbit Slider - Differently sized images shows behind current image

                    This hides other images and displays current image with a transparent background
                    Source: https://github.com/zurb/foundation/issues/312

                    Replace the jquery.foundation.orbit.js with the following, which is the same as the one found at the above link.
                    /*
                     * jQuery Orbit Plugin 1.4.0
                     * www.ZURB.com/playground
                     * Copyright 2010, ZURB
                     * Free to use under the MIT license.
                     * http://www.opensource.org/licenses/mit-license.php
                    */
                    
                    
                    (function($) {
                      
                      $.fn.findFirstImage = function () {
                    	  return this.first()
                    	          .find('img')
                                .andSelf().filter('img')
                                .first();
                    	};
                      
                      var ORBIT = {
                        
                        defaults: {  
                          animation: 'fade', 		// fade, horizontal-slide, vertical-slide, horizontal-push, vertical-push
                          animationSpeed: 1600, 				// how fast animtions are
                          timer: true, 						// true or false to have the timer
                          advanceSpeed: 12000, 				// if timer is enabled, time between transitions 
                          pauseOnHover: true, 				// if you hover pauses the slider
                          startClockOnMouseOut: false, 		// if clock should start on MouseOut
                          startClockOnMouseOutAfter: 1000, 	// how long after MouseOut should the timer start again
                          directionalNav: true, 				// manual advancing directional navs
                          captions: true, 					// do you want captions?
                          captionAnimation: 'fade', 			// fade, slideOpen, none
                          captionAnimationSpeed: 1200, 		// if so how quickly should they animate in
                          bullets: true,						// true or false to activate the bullet navigation
                          bulletThumbs: false,				// thumbnails for the bullets
                          bulletThumbLocation: '',			// location from this file where thumbs will be
                          afterSlideChange: $.noop,		// empty function 
                          fluid: true,
                          centerBullets: true    // center bullet nav with js, turn this off if you want to position the bullet nav manually
                     	  },
                     	  
                     	  activeSlide: 0,
                        numberSlides: 0,
                        orbitWidth: null,
                        orbitHeight: null,
                        locked: null,
                        timerRunning: null,
                        degrees: 0,
                        wrapperHTML: '<div class="orbit-wrapper" />',
                        timerHTML: '<div class="timer"><span class="mask"><span class="rotator"></span></span><span class="pause"></span></div>',
                        captionHTML: '<div class="orbit-caption"></div>',
                        directionalNavHTML: '<div class="slider-nav"><span class="right">Right</span><span class="left">Left</span></div>',
                        bulletHTML: '<ul class="orbit-bullets"></ul>',
                        
                        init: function (element, options) {
                          var $imageSlides,
                              imagesLoadedCount = 0,
                              self = this;
                          
                          // Bind functions to correct context
                          this.clickTimer = $.proxy(this.clickTimer, this);
                          this.addBullet = $.proxy(this.addBullet, this);
                          this.resetAndUnlock = $.proxy(this.resetAndUnlock, this);
                          this.stopClock = $.proxy(this.stopClock, this);
                          this.startTimerAfterMouseLeave = $.proxy(this.startTimerAfterMouseLeave, this);
                          this.clearClockMouseLeaveTimer = $.proxy(this.clearClockMouseLeaveTimer, this);
                          this.rotateTimer = $.proxy(this.rotateTimer, this);
                          
                          this.options = $.extend({}, this.defaults, options);
                          if (this.options.timer === 'false') this.options.timer = false;
                          if (this.options.captions === 'false') this.options.captions = false;
                          if (this.options.directionalNav === 'false') this.options.directionalNav = false;
                          
                          this.$element = $(element);
                          this.$wrapper = this.$element.wrap(this.wrapperHTML).parent();
                          this.$slides = this.$element.children('img, a, div');
                          
                          this.$element.bind('orbit.next', function () {
                            self.shift('next');
                          });
                          
                          this.$element.bind('orbit.prev', function () {
                            self.shift('prev');
                          });
                          
                          this.$element.bind('orbit.goto', function (event, index) {
                            self.shift(index);
                          });
                          
                          this.$element.bind('orbit.start', function (event, index) {
                            self.startClock();
                          });
                          
                          this.$element.bind('orbit.stop', function (event, index) {
                            self.stopClock();
                          });
                          
                          $imageSlides = this.$slides.filter('img');
                          
                          if ($imageSlides.length === 0) {
                            this.loaded();
                          } else {
                            $imageSlides.bind('imageready', function () {
                              imagesLoadedCount += 1;
                              if (imagesLoadedCount === $imageSlides.length) {
                                self.loaded();
                              }
                            });
                          }
                        },
                        
                        loaded: function () {
                          this.$element
                            .addClass('orbit')
                            .css({width: '1px', height: '1px'});
                            
                          this.$slides.addClass('orbit-slide');
                    	  
                            
                          this.setDimentionsFromLargestSlide();
                          this.updateOptionsIfOnlyOneSlide();
                          this.setupFirstSlide();
                          
                          if (this.options.timer) {
                            this.setupTimer();
                            this.startClock();
                          }
                          
                          if (this.options.captions) {
                            this.setupCaptions();
                          }
                          
                          if (this.options.directionalNav) {
                            this.setupDirectionalNav();
                          }
                          
                          if (this.options.bullets) {
                            this.setupBulletNav();
                            this.setActiveBullet();
                          }
                        },
                        
                        currentSlide: function () {
                          return this.$slides.eq(this.activeSlide);
                        },
                        
                        setDimentionsFromLargestSlide: function () {
                          //Collect all slides and set slider size of largest image
                          var self = this,
                              $fluidPlaceholder;
                              
                          self.$element.add(self.$wrapper).width(this.$slides.first().width());
                          self.$element.add(self.$wrapper).height(this.$slides.first().height());
                          self.orbitWidth = this.$slides.first().width();
                          self.orbitHeight = this.$slides.first().height();
                          $fluidPlaceholder = this.$slides.first().findFirstImage().clone();
                            
                          
                          this.$slides.each(function () {
                            var slide = $(this),
                                slideWidth = slide.width(),
                                slideHeight = slide.height();
                    
                            if (slideWidth > self.$element.width()) {
                              self.$element.add(self.$wrapper).width(slideWidth);
                              self.orbitWidth = self.$element.width();	       			
                            }
                            if (slideHeight > self.$element.height()) {
                              self.$element.add(self.$wrapper).height(slideHeight);
                              self.orbitHeight = self.$element.height();
                              $fluidPlaceholder = $(this).findFirstImage().clone();
                    	      }
                            self.numberSlides += 1;
                          });
                          
                          if (this.options.fluid) {
                            if (typeof this.options.fluid === "string") {
                              $fluidPlaceholder = $('<img src="http://placehold.it/' + this.options.fluid + '" />')
                            }
                            
                            self.$element.prepend($fluidPlaceholder);
                            $fluidPlaceholder.addClass('fluid-placeholder');
                            self.$element.add(self.$wrapper).css({width: 'inherit'});
                            self.$element.add(self.$wrapper).css({height: 'inherit'});
                            
                            $(window).bind('resize', function () {
                              self.orbitWidth = self.$element.width();
                              self.orbitHeight = self.$element.height();
                            });
                          }
                        },
                        
                        //Animation locking functions
                        lock: function () {
                          this.locked = true;
                        },
                        
                        unlock: function () { 
                          this.locked = false;
                        },
                        
                        updateOptionsIfOnlyOneSlide: function () {
                          if(this.$slides.length === 1) {
                          	this.options.directionalNav = false;
                          	this.options.timer = false;
                          	this.options.bullets = false;
                          }
                        },
                        
                        setupFirstSlide: function () {
                          //Set initial front photo z-index and fades it in
                          var self = this;
                    	 
                          	   this.$slides.css({ "opacity":0}) 
                    		   
                          this.$slides.first()
                          	.css({"z-index" : 3,"opacity":1})
                          	.fadeIn(function() {
                          		//brings in all other slides IF css declares a display: none
                          		self.$slides.css({"display":"block"})
                          });
                    	  
                        },
                        
                        startClock: function () {
                          var self = this;
                          
                          if(!this.options.timer) { 
                        		return false;
                        	} 
                    
                        	if (this.$timer.is(':hidden')) {
                            this.clock = setInterval(function () {
                              self.$element.trigger('orbit.next');
                            }, this.options.advanceSpeed);            		
                        	} else {
                            this.timerRunning = true;
                            this.$pause.removeClass('active')
                            this.clock = setInterval(this.rotateTimer, this.options.advanceSpeed / 180);
                          }
                        },
                        
                        rotateTimer: function () {
                          var degreeCSS = "rotate(" + this.degrees + "deg)"
                          this.degrees += 2;
                          this.$rotator.css({ 
                            "-webkit-transform": degreeCSS,
                            "-moz-transform": degreeCSS,
                            "-o-transform": degreeCSS
                          });
                          if(this.degrees > 180) {
                            this.$rotator.addClass('move');
                            this.$mask.addClass('move');
                          }
                          if(this.degrees > 360) {
                            this.$rotator.removeClass('move');
                            this.$mask.removeClass('move');
                            this.degrees = 0;
                            this.$element.trigger('orbit.next');
                          }
                        },
                        
                        stopClock: function () {
                          if (!this.options.timer) { 
                            return false; 
                          } else {
                            this.timerRunning = false;
                            clearInterval(this.clock);
                            this.$pause.addClass('active');
                          }
                        },
                        
                        setupTimer: function () {
                          this.$timer = $(this.timerHTML);
                          this.$wrapper.append(this.$timer);
                    
                          this.$rotator = this.$timer.find('.rotator');
                          this.$mask = this.$timer.find('.mask');
                          this.$pause = this.$timer.find('.pause');
                          
                          this.$timer.click(this.clickTimer);
                    
                          if (this.options.startClockOnMouseOut) {
                            this.$wrapper.mouseleave(this.startTimerAfterMouseLeave);
                            this.$wrapper.mouseenter(this.clearClockMouseLeaveTimer);
                          }
                          
                          if (this.options.pauseOnHover) {
                            this.$wrapper.mouseenter(this.stopClock);
                          }
                        },
                        
                        startTimerAfterMouseLeave: function () {
                          var self = this;
                    
                          this.outTimer = setTimeout(function() {
                            if(!self.timerRunning){
                              self.startClock();
                            }
                          }, this.options.startClockOnMouseOutAfter)
                        },
                        
                        clearClockMouseLeaveTimer: function () {
                          clearTimeout(this.outTimer);
                        },
                        
                        clickTimer: function () {
                          if(!this.timerRunning) {
                              this.startClock();
                          } else { 
                              this.stopClock();
                          }
                        },
                        
                        setupCaptions: function () {
                          this.$caption = $(this.captionHTML);
                          this.$wrapper.append(this.$caption);
                      	  this.setCaption();
                        },
                        
                        setCaption: function () {
                          var captionLocation = this.currentSlide().attr('data-caption'),
                              captionHTML;
                        		
                          if (!this.options.captions) {
                        		return false; 
                        	} 
                        	        		
                        	//Set HTML for the caption if it exists
                        	if (captionLocation) {
                        	  captionHTML = $(captionLocation).html(); //get HTML from the matching HTML entity
                        		this.$caption
                          		.attr('id', captionLocation) // Add ID caption TODO why is the id being set?
                              .html(captionHTML); // Change HTML in Caption 
                              //Animations for Caption entrances
                            switch (this.options.captionAnimation) {
                              case 'none':
                                this.$caption.show();
                                break;
                              case 'fade':
                                this.$caption.fadeIn(this.options.captionAnimationSpeed);
                                break;
                              case 'slideOpen':
                                this.$caption.slideDown(this.options.captionAnimationSpeed);
                                break;
                            }
                        	} else {
                        		//Animations for Caption exits
                        		switch (this.options.captionAnimation) {
                              case 'none':
                                this.$caption.hide();
                                break;
                              case 'fade':
                                this.$caption.fadeOut(this.options.captionAnimationSpeed);
                                break;
                              case 'slideOpen':
                                this.$caption.slideUp(this.options.captionAnimationSpeed);
                                break;
                            }
                        	}
                        },
                        
                        setupDirectionalNav: function () {
                          var self = this;
                    
                          this.$wrapper.append(this.directionalNavHTML);
                          
                          this.$wrapper.find('.left').click(function () { 
                            self.stopClock();
                            self.$element.trigger('orbit.prev');
                          });
                          
                          this.$wrapper.find('.right').click(function () {
                            self.stopClock();
                            self.$element.trigger('orbit.next');
                          });
                        },
                        
                        setupBulletNav: function () {
                          this.$bullets = $(this.bulletHTML);
                        	this.$wrapper.append(this.$bullets);
                        	this.$slides.each(this.addBullet);
                        	this.$element.addClass('with-bullets');
                        	if (this.options.centerBullets) this.$bullets.css('margin-left', -this.$bullets.width() / 2);
                        },
                        
                        addBullet: function (index, slide) {
                          var position = index + 1,
                              $li = $('<li>' + (position) + '</li>'),
                              thumbName,
                              self = this;
                    
                      		if (this.options.bulletThumbs) {
                      			thumbName = $(slide).attr('data-thumb');
                      			if (thumbName) {
                              $li
                                .addClass('has-thumb')
                                .css({background: "url(" + this.options.bulletThumbLocation + thumbName + ") no-repeat"});;
                      			}
                      		}
                      		this.$bullets.append($li);
                      		$li.data('index', index);
                      		$li.click(function () {
                      			self.stopClock();
                      			self.$element.trigger('orbit.goto', [$li.data('index')])
                      		});
                        },
                        
                        setActiveBullet: function () {
                          if(!this.options.bullets) { return false; } else {
                        		this.$bullets.find('li')
                        		  .removeClass('active')
                        		  .eq(this.activeSlide)
                        		  .addClass('active');
                        	}
                        },
                        
                        resetAndUnlock: function () {
                          this.$slides
                          	.eq(this.prevActiveSlide)
                          	.css({"z-index" : 1}) ;
                          this.unlock();
                          this.options.afterSlideChange.call(this, this.$slides.eq(this.prevActiveSlide), this.$slides.eq(this.activeSlide));
                        },
                        
                        shift: function (direction) {
                          var slideDirection = direction;
                          
                          //remember previous activeSlide
                          this.prevActiveSlide = this.activeSlide;
                          
                          //exit function if bullet clicked is same as the current image
                          if (this.prevActiveSlide == slideDirection) { return false; }
                          
                          if (this.$slides.length == "1") { return false; }
                          if (!this.locked) {
                            this.lock();
                    	      //deduce the proper activeImage
                            if (direction == "next") {
                              this.activeSlide++;
                              if (this.activeSlide == this.numberSlides) {
                                  this.activeSlide = 0;
                              }
                            } else if (direction == "prev") {
                              this.activeSlide--
                              if (this.activeSlide < 0) {
                                this.activeSlide = this.numberSlides - 1;
                              }
                            } else {
                              this.activeSlide = direction;
                              if (this.prevActiveSlide < this.activeSlide) { 
                                slideDirection = "next";
                              } else if (this.prevActiveSlide > this.activeSlide) { 
                                slideDirection = "prev"
                              }
                            }
                    
                            //set to correct bullet
                            this.setActiveBullet();  
                                 
                            //set previous slide z-index to one below what new activeSlide will be
                            this.$slides
                              .eq(this.prevActiveSlide)
                              .css({"z-index" : 2});    
                                
                            //fade
                            if (this.options.animation == "fade") {
                              this.$slides
                                .eq(this.activeSlide)
                                .css({"opacity" : 0, "z-index" : 3})
                                .animate({"opacity" : 1}, this.options.animationSpeed, this.resetAndUnlock);
                    		  this.$slides
                          	   .eq(this.prevActiveSlide)
                          	    
                    		   .animate({"opacity" : 0},20);
                            }
                            
                            //horizontal-slide
                            if (this.options.animation == "horizontal-slide") {
                              if (slideDirection == "next") {
                                this.$slides
                                  .eq(this.activeSlide)
                                  .css({"left": this.orbitWidth, "z-index" : 3})
                                  .animate({"left" : 0}, this.options.animationSpeed, this.resetAndUnlock);
                              }
                              if (slideDirection == "prev") {
                                this.$slides
                                  .eq(this.activeSlide)
                                  .css({"left": -this.orbitWidth, "z-index" : 3})
                                  .animate({"left" : 0}, this.options.animationSpeed, this.resetAndUnlock);
                              }
                            }
                                
                            //vertical-slide
                            if (this.options.animation == "vertical-slide") { 
                              if (slideDirection == "prev") {
                                this.$slides
                                  .eq(this.activeSlide)
                                  .css({"top": this.orbitHeight, "z-index" : 3})
                                  .animate({"top" : 0}, this.options.animationSpeed, this.resetAndUnlock);
                              }
                              if (slideDirection == "next") {
                                this.$slides
                                  .eq(this.activeSlide)
                                  .css({"top": -this.orbitHeight, "z-index" : 3})
                                  .animate({"top" : 0}, this.options.animationSpeed, this.resetAndUnlock);
                              }
                            }
                            
                            //horizontal-push
                            if (this.options.animation == "horizontal-push") {
                              if (slideDirection == "next") {
                                this.$slides
                                  .eq(this.activeSlide)
                                  .css({"left": this.orbitWidth, "z-index" : 3})
                                  .animate({"left" : 0}, this.options.animationSpeed, this.resetAndUnlock);
                                this.$slides
                                  .eq(this.prevActiveSlide)
                                  .animate({"left" : -this.orbitWidth}, this.options.animationSpeed);
                              }
                              if (slideDirection == "prev") {
                                this.$slides
                                  .eq(this.activeSlide)
                                  .css({"left": -this.orbitWidth, "z-index" : 3})
                                  .animate({"left" : 0}, this.options.animationSpeed, this.resetAndUnlock);
                    		        this.$slides
                                  .eq(this.prevActiveSlide)
                                  .animate({"left" : this.orbitWidth}, this.options.animationSpeed);
                              }
                            }
                            
                            //vertical-push
                            if (this.options.animation == "vertical-push") {
                              if (slideDirection == "next") {
                                this.$slides
                                  .eq(this.activeSlide)
                                  .css({top: -this.orbitHeight, "z-index" : 3})
                                  .animate({top : 0}, this.options.animationSpeed, this.resetAndUnlock);
                                this.$slides
                                  .eq(this.prevActiveSlide)
                                  .animate({top : this.orbitHeight}, this.options.animationSpeed);
                              }
                              if (slideDirection == "prev") {
                                this.$slides
                                  .eq(this.activeSlide)
                                  .css({top: this.orbitHeight, "z-index" : 3})
                                  .animate({top : 0}, this.options.animationSpeed, this.resetAndUnlock);
                    		        this.$slides
                                  .eq(this.prevActiveSlide)
                                  .animate({top : -this.orbitHeight}, this.options.animationSpeed);
                              }
                            }
                            
                            this.setCaption();
                          }
                        }
                      };
                    
                      $.fn.orbit = function (options) {
                        return this.each(function () {
                          var orbit = $.extend({}, ORBIT);
                          orbit.init(this, options);
                        });
                      };
                    
                    })(jQuery);
                            
                    /*!
                     * jQuery imageready Plugin
                     * http://www.zurb.com/playground/
                     *
                     * Copyright 2011, ZURB
                     * Released under the MIT License
                     */
                    (function ($) {
                      
                      var options = {};
                      
                      $.event.special.imageready = {
                        
                        setup: function (data, namespaces, eventHandle) {
                          options = data || options;
                        },
                    		
                    		add: function (handleObj) {
                    		  var $this = $(this),
                    		      src;
                    		      
                    	    if ( this.nodeType === 1 && this.tagName.toLowerCase() === 'img' && this.src !== '' ) {
                      			if (options.forceLoad) {
                      			  src = $this.attr('src');
                      			  $this.attr('src', '');
                      			  bindToLoad(this, handleObj.handler);
                              $this.attr('src', src);
                      			} else if ( this.complete || this.readyState === 4 ) {
                              handleObj.handler.apply(this, arguments);
                      			} else {
                      			  bindToLoad(this, handleObj.handler);
                      			}
                      		}
                    		},
                    		
                    		teardown: function (namespaces) {
                    		  $(this).unbind('.imageready');
                    		}
                    	};
                    	
                    	function bindToLoad(element, callback) {
                    	  var $this = $(element);
                    
                        $this.bind('load.imageready', function () {
                           callback.apply(element, arguments);
                           $this.unbind('load.imageready');
                         });
                    	}
                    
                    }(jQuery));


                    Comment out or remove from the flexibility_footer.html static file.
                    <script src="[[++site_url]]assets/templates/flexibility/javascripts/foundation.min.js"></script>


                    The controls for the orbit slider are in the app.js file. Editing the jquery.foundation.orbit.js defaults doesn't affect the slider for some reason.

                    You can also recompile foundation.min.js with the jquery files you need, and edit out all the individual files the template footer. Flexibility comes with everything in the footer including the min.js by default so you can pick and choose.


                    Center Orbit Slider Images


                    #featured.orbit-slide img {margin: 0 auto; position: relative; display: block; }
                    #slider img {margin:0 auto; display: block; }

                    I don't know why both are necessary, but neither works without the other. As of yet, I haven't figured out how to center the images horizontally.

                    Page Lightbox

                    - call all chunks or snippets uncached. eg:
                    [[!$contactform]]



                    Meta Tags

                    This following portion of the head is not healthy (it also exists in the MODX Boilerplate package). It doesn't seem to work properly to strip MODX tags. If there's a snippet or chunk within the first 200 from content, everything goes wonked.

                    Snippets fall apart and show up twice (in the body before the header, and again in the content) because it doesn't strip the tags. The meta tag output is weird as well. Sometimes the MODX elements work, sometimes they don't and output junk. Sometimes if you fill in the introtext field with something/anything all is well, but it's not always reliable.

                      <meta name="description" content="[[*introtext:empty=`[[*content:strip_tags]]`:limit=`200`]]" />


                    This doesn't work either:
                      <meta name="description" content="[[*content:stripTags:ellipsis=`200`]]" />


                    I've improvised with the following, but you have to make sure the introtext field is not empty, or fill it with characters from the content excluding any MODX tags.
                    <meta name="description" content="[[*introtext]]" />

                      Frogabog- MODX Websites in Portland Oregon
                      "Do yourself a favor and get a copy of "MODX - The Official Guide" by Bob Ray. Read it.
                      Having server issues? These guys have MODX Hosting perfected - SkyToaster
                      • 39559
                      • 34 Posts
                      My Foundation navbar:

                        <!-- Header and Nav -->
                      
                      <div class="fixed contain-to-grid">
                        <nav class="top-bar">
                          <ul>
                            <!-- Title Area -->
                            <li class="name">
                              <h1>
                                <a href="[[++site_url]]">
                                  [[++site_name]]
                                </a>
                              </h1>
                            </li>
                            <li class="toggle-topbar"><a href="#"></a></li>
                          </ul>
                      
                          <section>
                            <!-- Left Nav Section -->
                            [[Wayfinder?
                                      &outerClass=`left`
                                      &selfClass=`active`
                          		&innerClass=`dropdown`
                      		&rowTpl=`navRow`
                      		&innerRowTpl=`navInnerRow`
                      		&startId=`0`
                      		&level=`0`
                      		&titleOfLinks=``
                                      &cacheResults=`1`
                      	]]
                      
                            <!-- Right Nav Section (social media links) -->
                            <ul class="right">
                              <li class="divider"></li>
                              <a href="[[getResourceField? &id=`11` &field=`facebook` &processTV=`1`]]" target="_blank" class="fc-webicon facebook has-tip tip-bottom" title="Like us on Facebook" style="margin-top:7px; margin-left:45px;"></a>
                      	<a href="[[getResourceField? &id=`11` &field=`twitter` &processTV=`1`]]" target="_blank" class="fc-webicon twitter has-tip tip-bottom" title="Follow us on Twitter" style="margin-top:7px; margin-left:7px;"></a>
                      	<a href="[[getResourceField? &id=`11` &field=`googleplus` &processTV=`1`]]" target="_blank" class="fc-webicon googleplus has-tip tip-bottom" title="Join our circle" style="margin-top:7px; margin-left:7px;"></a>
                      	<a href="[[getResourceField? &id=`11` &field=`rss` &processTV=`1`]]" target="_blank" class="fc-webicon rss has-tip tip-bottom" title="Get our Feed" style="margin-top:7px; margin-left:7px; margin-right:45px;"></a>
                      
                            </ul>
                          </section>
                      
                        </nav>
                      </div>
                      
                        <!-- End Header and Nav -->


                      My rowTpl:

                      <li class="divider"></li>
                      <li class="[[+wf.classnames]] [[+wf.isfolder:is=`1`:then=`has-dropdown`]]">
                          <a href="[[+wf.link]]" [[+wf.attributes]]>[[+wf.linktext]]</a>
                      	[[+wf.wrapper]]
                      </li>


                      My innerRowTpl:

                      <li>
                      <a href="[[+wf.link]]" [[+wf.attributes]]>[[+wf.linktext]]</a>
                      [[+wf.wrapper]]
                      </li>