We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 12684
    • 118 Posts
    Absolutely bob1000. This does make sense. My last post was more for the membercheck than the phX one you suggested. However this one does have it’s problems for me for some reason.

    Here is what happens.

    The link is displayed as "Log In"

    I first log in as a Vendor and it does indeed work. It changes to the My Account "[~40~]" Link. One thing that is weird though is that I have a login page and when I go to that page the link changes back to "Log in"

    I then log out and the link goes back to "Log In".

    I then log in as a Registered Members. The link changes to "My Account" However, the link reference is to the Vendor page {~40~}. I have to refresh and go through a couple other links and then finally it changes to the {~5~} Link. And the same weird problem happens when I go to the Log In page... it changes the "My Account" to "Log In"


    I hope that all makes sense.
      • 3707
      • 241 Posts
      I don’t get that. Sounds like a caching problem. Are your pages cached?
        • 12684
        • 118 Posts
        Yes Bob the pages are all the same. Cached. should they not be? This is a very weird problem.
          • 4041
          • 788 Posts
          Yes sir, any dynamic pages like these need to be set Uncached. Also then keep in mind the nesting order of snippets as well:

          ex: [!DynamicSnippet? params=[[CachedSnippet]]!]
            xforum
            http://frsbuilders.net (under construction) forum for evolution
            • 12684
            • 118 Posts
            These links are in the template. I would have to uncache all the pages.
              • 3707
              • 241 Posts
              You don’t have to set all your pages to uncached, you might have a good reason for caching your pages or maybe you have a large site and it’s impractical to change them all. However, that PHx solution won’t work with cached pages.

              One possible alternative is to call the original Loginmenu chunk from an uncached snippet.
              $modx->getChunk('Loginmenu');
                • 12684
                • 118 Posts
                Well, now as it turns out, the client has the need for a third members group, which means that I will need a total of 4 chunk choices.

                Any suggestions?
                  • 3749
                  • 24,544 Posts
                  Quote from: IG88 at Jul 15, 2008, 09:27 PM

                  Well, now as it turns out, the client has the need for a third members group, which means that I will need a total of 4 chunk choices.

                  Any suggestions?

                  The cleanest way, is probably just a custom snippet that tests for group membership and ouputs the appropriate links (assuming that they won’t change all that often). As an alternative, you could modify the extended MemberCheck snippet.
                    Did I help you? Buy me a beer
                    Get my Book: MODX:The Official Guide
                    MODX info for everyone: http://bobsguides.com/modx.html
                    My MODX Extras
                    Bob's Guides is now hosted at A2 MODX Hosting
                    • 3707
                    • 241 Posts
                    I agree that a custom snippet or modified extMemberCheck would be the neatest way to go.

                    As an alternative or until you get that snippet, you could try this. Use the Personalize snippet to check if the user is logged in or not. If not, deliver the login link, if they are call the extMemberCheck snippet to check the user group and deliver the relevant link. This way you can have as many user groups as you want.
                    [!Personalize? &yesChunk=`memberCheckTpl` &noChunk=`loginTpl`!]

                    loginTpl
                    <a href="[~2~]">Login</a>

                    membercheckTpl
                    [[extMemberCheck? &groups=`Vendors, Registered Members` &chunk=`vendorLink, memberLink` &debug=`false`]]

                    vendorLink
                    <a href="[~40~]">My Account</a>

                    memberLink
                    <a href="[~5~]">My Account</a>
                      • 12684
                      • 118 Posts
                      I think the best bet would be to extend the extMemberCheck snippet as I have said before. I am taking stabs in the dark on this, but below is what I have with a small php echo in there to maybe help. echo htmlentities(var_dump($memberCheck));


                      <?php
                      #::::::::::::::::::::::::::::::::::::::::
                      # Snippet name: extMemberCheck
                      # Short Desc: checks logged in groups and displays a chunk
                      # Version: 1.0
                      # Created By Richard Pugh from the MemberCheck 1.0 snippet
                      # MemberCheck Created By    Ryan Thrash (vertexworks.com)
                      #             Sanitized By  Jason Coward (opengeek.com)
                      #
                      # Date: February 5th, 2007
                      #
                      # Changelog:
                      # Feb 05, 07 -- initial release
                      #
                      #::::::::::::::::::::::::::::::::::::::::
                      # Description:
                      #   Checks to see if users belong to a certain group and
                      #   displays the specified chunk if they do. Performs
                      #   several sanity checks and allows multiple uses on a page.
                      #
                      #   Two modes of use are possible, if only one output chunk
                      #   is specified then this snippet functions as the original
                      #   MemberCheck returning the chunk if the user is in ANY
                      #   of the groups specified.
                      #
                      #   If several chunks are specified there must be a one to one
                      #   correspondence between groups and chunks, i.e. there must be
                      #   as many values specified in groups as in chunks. The snippet
                      #   then checks if the user is in the groups one by one and
                      #   outputs the corresponding chunk, i.e. if the user is part of
                      #   group2 then chunk2 will be output. If you have a hierarchy
                      #   of user groups please ensure that they are placed in
                      #   descending order of importance in the group array as the
                      #   first matching value found is always returned.
                      #
                      # Params:
                      #   &groups [array] (REQUIRED)
                      #       array of webuser group-names to check against
                      #
                      #   &chunk [array] (REQUIRED)
                      #       name of the chunk to use if passes the check
                      #
                      #   &ph [string] (optional)
                      #       name of the placeholder to set instead of directly returning chunk
                      #
                      #   &debug [boolean] (optional | false)
                      #       turn on debug mode for extra troubleshooting
                      #
                      # Example Usage:
                      #
                      #   [[extMemberCheck? &groups=`group1, group2` &chunk=`chunk1, chunk2` &ph=`putItHere` &debug=`true`]]
                      #
                      #   This would place the chunk 'chunk1' into a placeholder (called 'putItHere') if the user
                      #   is logged in as a webuser and is a member of the 'group1' group. If he is a member of the
                      #   'group2' group, then 'chunk2' will be returned.
                      #
                      #   If the chunk array contains only one value, then if the user is in either 'group1' OR 'group2'
                      #   then the value of 'chunk1' is returned ( as in the original MemberCheck ).
                      #
                      #   The optional debug parameter can be used to display informative error messages
                      #   when configuring this snippet for your site. For example, if the developer had
                      #   mistakenly typed 'groupX' for the first group, and none existed with debug mode on,
                      #   it would have returned the error message: The group 'groupX' could not be found....
                      #
                      #::::::::::::::::::::::::::::::::::::::::
                      
                      # debug parameter
                      $debug = isset ($debug) ? $debug : false;
                      
                      # check if inside manager
                      if ($m = $modx->insideManager()) {
                          return ''; # don't go any further when inside manager
                      }
                      
                      if (!isset ($groups)) {
                          return $debug ? '<p>Error: No Group(s) Specified</p>' : '';
                      }
                      
                      if (!isset ($chunk)) {
                          return $debug ? '<p>Error: No Chunk(s) Specified</p>' : '';
                      }
                      
                      # check if default is set, if not sets value
                      $default = (isset($default))? $default : '';
                      
                      # turn comma-delimited list of groups into an array
                      $groups = explode(',', $groups);
                      $chunk = explode(',', $chunk);
                      
                      if (!class_exists('extMemberCheck')) {
                          class extMemberCheck {
                              var $allGroups = NULL;
                              var $debug;
                      
                              function getInstance($debug) {
                                  static $instance;
                                  if (!isset ($instance)) {
                                      $instance = new extMemberCheck($debug);
                                  }
                                  return $instance;
                              }
                      
                              function extMemberCheck($debug = false) {
                                  global $modx;
                      
                                  $this->debug = $debug;
                                  if ($debug) {
                                      $this->allGroups = array ();
                                      $tableName = $modx->getFullTableName('webgroup_names');
                                      $sql = "SELECT name FROM $tableName";
                                      if ($rs = $modx->db->query($sql)) {
                                          while ($row = $modx->db->getRow($rs)) {
                                              array_push($this->allGroups, stripslashes($row['name']));
                                          }
                                      }
                                  }
                              }
                      
                              function isValidGroup($groupName) {
                                  $isValid = !(array_search($groupName, $this->allGroups) === false);
                                  return $isValid;
                              }
                      
                              function getMemberChunk(& $groups, $chunk, $default) {
                                  global $modx;
                                  $o = '';
                                  if (!is_array($chunk)) {
                                      $o .= "<p>No chunk names were specified!</p>";
                                      return $o;
                                  }
                                  if (!is_array($groups)) {
                                      $o .= "<p>No group names were specified!</p>";
                                      return $o;
                                  }
                          
                                  if (count($groups) != count($chunk)) {
                                      if (count($chunk) != 1) {
                                          $o .= "<p>Number of group names and chunks must be the same!</p>";
                                       return $o;
                                      }
                                  }
                      
                                  for ($i = 0; $i < count($groups); $i++) {
                                      $groups[$i] = trim($groups[$i]);                $chnk = trim($chunk[$i]);
                                     		   if ($this->isValidGroup($groups[$i])) {
                                          if (count($chunk) != 1) {
                                              $group = array($groups[$i]);
                                              $check = $modx->isMemberOfWebGroup($group);
                                              if ($check) {
                                                  $chunkcheck = $modx->getChunk($chnk);
                                                  $o = ($chunkcheck) ? $chunkcheck : '';
                                                  if (!$chunkcheck)
                                                      $o .= $this->debug ? "<p>The chunk <strong>$chnk</strong> not found...</p>" : '';
                                                  return $o;
                                              } 
                                          } 
                                              $check = $modx->isMemberOfWebGroup($groups);
                                              $chunkcheck = $modx->getChunk($chnk);
                      						$defaultcheck = $modx->getChunk($default);
                      						
                                              $o .= ($check && $chunkcheck) ? $chunkcheck : '';
                                              if (!$chunkcheck)
                                                  $o .= $this->debug ? "<p>The chunk <strong>$chnk</strong> not found...</p>" : '';
                                          }
                      				else
                      				{
                      					if ($defaultcheck && (strlen($default) >= 1)) {
                      						$o .= ($defaultcheck) ? $defaultcheck : '';
                      					}
                      					if (!$defaultcheck && (strlen($default) >= 1)) {
                      						$o .= $this->debug ? "<p>The default chunk <strong>$default</strong> not found...</p>" : '';
                      					}
                      				}
                                  
                                     {
                                          if ($this->debug) {
                                              return "<p>The group <strong>" . $groups[$i] . "</strong> could not be found...</p>";
                                          }
                      					return $o;
                                      }
                                  }
                              }
                          }
                      }
                      
                      $memberCheck = extMemberCheck :: getInstance($debug);
                      
                      if (!isset ($ph)) {
                          echo htmlentities(var_dump($memberCheck));
                          return $memberCheck->getMemberChunk($groups, $chunk, $default);
                      } else {
                          $modx->setPlaceholder($ph, $memberCheck->getMemberChunk($groups, $chunk, $default));
                          return '';
                      }
                      ?>