We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 23605
    • 16 Posts
    I uploaded the NewsManager and NewsEditor snippets as instructed.
    I created the two pages Newsmanager and NewsEditor.

    The NewsEditor part is working perfectly
    in the Newsmanager page I am calling with the following:

    [!NewsManager &folder=`3213` &editformid=`2312` &clearcache=`1`!]


    where 3213 is my news folder and 2312 is my NewsEditor document I edit from.

    When I open the Newsmanager page from the front end it is empty. It seems it isn’t seeing the default $rowtpl.

    Note: both pages Newsmanager and NewsEditor are outside the News folder I created to post articles in.

    Am I missing something. Any hints?

    Thanks.
      Never give up. You can do it.
      • 31783
      • 2 Posts
      did you allready solved it? if no, still need it? there are very much errors in the code, i solved some things what i saw was wrong, dont know if everything is allright now... i will add the new code today if i can find out how to do that.
      Bart
        • 31783
        • 2 Posts
        cant login into the site :S until i can add it, here’s the manager part:

        /*
         ****************************************
         *
         * Snippet Name: NewsManager
         * Short Desc: Manage articles directly from front end (news, blogs, PR, etc.)
         * Created By: xyzvisual
         *
         * Version: 1.4
         * Modified: July 23, 2011
         *
         * Changelog: 
         *   Sep 19, 06 -- rewrite and documentation [tfd]
         *   July 23, 11 -- Changed some realy ugly most typo errors. Done by VolgensBartjes (@VolgensBartjes)
         *
         ****************************************
         *
         * Description: 	
         *   Display all owned articles in a table together with buttons
         *   that permit to edit/delete/hide/publisch etc. every single
         *   article in a blog.
         *   !!! Use only one snippet per page !!!
         *
         ****************************************
         *  
         * Parameters [default]:
         *   &folder      - folder id where documents are stored
         *   &makefolder  - set to 1 to automatically convert the parent document to a folder. [0]
         *   &postid      - document id to load after working with a news item. [current page]
         *   &editformid  - document id used to modify an article ($_REQUEST['editid'] will hold the id of the document to modify)
         *   &template    - name of template to use for news post
         *   &headertpl   - header template (chunk name) to be inserted at the begining of the news content
         *   &footertpl   - footer template (chunk name) to be inserted at the end of the news content
         *   &rowtpl      - template used to display a single post (chunk name)
         *   &clearcache  - when set to 1 the system will automatically clear the site cache after updating an article.
         *   &nrposts     - number of posts to show per page [10]
         *   &paginate    - paginate [0]
         *   &prv         - chunk to be used inside the previous link ["< Previous"]
         *   &nxt         - chunk to be used inside the next link ["Next >"]
         *   &alwaysshow  - always show previous or next links (if enabled, hyperlink will be removed when prev/next page is not available, | delimiter will not be inserted) [0]
         *   &prevnextsplitter - character delimiter to use to separate previous next links if alwaysshow is 0  ["|"]
         *   &show        - chunk to be used for the show action ["Show"]
         *   &edit        - chunk to be used for the edit action ["Edit"]
         *   &delete      - chunk to be used for the delete action ["Delete"]
         *   &refresh     - chunk to be used for the "move on top" action ["Move on top"]
         *   &publish     - chunk to be used for the publish action ["Publish"]
         *   &unpublish   - chunk to be used for the unpublish action ["Unpublish"]
         *   &showinmenu  - chunk to be used for the "Show in menu" action ["Show in menu"]
         *   &hideinmenu  - chunk to be used for the "Hide in menu" action ["Remove from menu"]
         *   &emptytext   - text to use when no news items are found ["<p>No entries found.</p>"]
         *  
         ****************************************
         *
         * Request variables (via GET, POST, or COOKIE):
         *
         *   deleteid      - id of post to delete
         *   refreshid     - id of post for whic the 'createdon' property is set to now, thus effectively putting it at the top of the list
         *   hidemenuid    - id of post for which the 'hidemenu' property must be changed
         *   hidemenuvalue - value to which 'hidemenu' must be set
         *   publishid     - id of post for which the 'published' property must be changed
         *   publishvalue  - value to which 'published' must be set
         *  
         ****************************************
         *
         * Important Notes
         *   When in pagination mode (&paginate = 1) always call the snippet uncached in the [!NewsManager!] format
         *   Also, in pagination mode, make sure to use the placeholders for navigation!
         *   To display tv's make sure you use the tv prefix! 
         *   For example, if you have the template variable author you would put [+tvauthor+] in your template.
         *
         * Snippet placeholders:
         *   [+sepchar+]    - separator between a document URL and parameters
         *                    (for example [~[*id*]~][+sepchar+]param1=value1&param2=value2)
         *   [+editformid+] - Id of page to use for editing a post
         *   [+pagetitle+]  - current post's page title
         *   [+longtitle+]  - current post's article title
         *   [+id+]         - current post's id
         *   [+edit+]       - text for edit action
         *   [+delete+]     - text for delete action
         *   [+show+]       - text for show action
         *   [+refresh+]    - text for refresh action (update the creation date to now so the post is first in the list)
         *   [+hidemenu+]   - text for hide menu action or show menu action (dependent of the current state of the post)
         *   [+pubish+]     - text for publish action or unpublish action (dependent of the current state of the post)
         *   [+next+]       - text for next action
         *   [+previous+]   - text for previous action
         *   [+prevnextsplitter+] - splitter if always show is 0
         *   [+pages+]      - page list
         *   [+totalpages+] - total number of pages
         *   [+start+]      - the # of the first item shown
         *   [+stop+]       - the # of the last item shown
         *   [+total+]      - the total # of items on the page
         */
        
        function nm_clear_cache() {
          // empty cache
          if($clearcache==1){
            include_once $modx->config['base_path']."manager/processors/cache_sync.class.processor.php";
            $sync = new synccache();
            $sync->setCachepath("assets/cache/");
            $sync->setReport(false);
            $sync->emptyCache(); // first empty the cache		
          }
        }
        
        // paginatation enabled or disabled
        $paginate = isset($paginate)? $paginate : 0;
        
        // number of posts of which to show per page
        $nrposts = isset($nrposts) ? $nrposts : 10;
        
        // get post # to start at
        $start = isset($_REQUEST['start'])? $_REQUEST['start'] : 0;
        
        // Are friendly urls enabled?
        $furls = $modx->config['friendly_urls'];
         
        // get the chunk code to be used inside the previous <a> tag.
        $prv = isset($prv)? $modx->getChunk($prv) : "< Previous";
            
        // get the chunk code to be used inside the next <a> tag.
        $nxt = isset($nxt)? $modx->getChunk($nxt) : "Next >";
        
        // determine whether or not to always show previous next links
        $alwaysshow = isset($alwaysshow)? $alwaysshow : 0;
        
        // splitter to use of always show is disabled
        $prevnextsplitter = isset($prevnextsplitter)? $prevnextsplitter : "|";
        
        // Set the folder to show the news change to what you want or call by snippet
        $folder = isset($folder) ? $folder : $modx->documentIdentifier;
        
        // Page used to edit an article
        $editformid = isset($editformid) ? $editformid : $modx->documentIdentifier;
        
        // Id of page to goto after user deleted or publiched an article default to this page
        $postid = isset($postid) ? $postid : $modx->documentIdentifier;
        
        // Text to be displayed when there are no results
        $emptytext = isset($emptytext)? $emptytext : '<p>No entries found.</p>';
        
        // Get values from a post
        $deleteid      = (isset($_REQUEST['deleteid'])      ? $_REQUEST['deleteid'] : "");
        $refreshid     = (isset($_REQUEST['refreshid'])     ? $_REQUEST['refreshid'] : "");
        $hidemenuvalue = (isset($_REQUEST['hidemenuvalue']) ? $_REQUEST['hidemenuvalue'] : "");
        $hidemenuid    = (isset($_REQUEST['hidemenuid'])    ? $_REQUEST['hidemenuid'] : "");
        $publishvalue  = (isset($_REQUEST['publishvalue'])  ? $_REQUEST['publishvalue'] : "");
        $publishid     = (isset($_REQUEST['publishid'])     ? $_REQUEST['publishid'] : "");
        
        // Global placeholders
        $showplaceholder = (isset($show) ? $modx->getChunk($show) : "Show");
        $editplaceholder = (isset($edit) ? $modx->getChunk($edit) : "Edit");
        $deleteplaceholder = (isset($delete) ? $modx->getChunk($delete) : "Delete");
        $refreshplaceholder = (isset($refresh) ? $modx->getChunk($refresh) : "Move on top");
        $publishplaceholder = (isset($publish) ? $modx->getChunk($publish) : "Publish");
        $unpublishplaceholder = (isset($unpublish) ? $modx->getChunk($unpublish) : "Unpublish");
        $hideinmenuplaceholder = (isset($hideinmenu) ? $modx->getChunk($hideinmenu) : "Remove from menu");
        $showinmenuplaceholder = (isset($showinmenu) ? $modx->getChunk($showinmenu) : "Show in menu");
        $modx->setPlaceHolder('show', $showplaceholder);
        $modx->setPlaceHolder('edit', $editplaceholder);
        $modx->setPlaceHolder('delete', $deleteplaceholder);
        $modx->setPlaceHolder('refresh', $refreshplaceholder);
        $modx->setPlaceHolder('editformid', $editformid);
        $modx->setPlaceHolder('postid', $postid);
        $modx->setPlaceHolder('docid', $modx->documentIdentifier);
        $modx->setPlaceHolder('sepchar', ($furls == 1 ? '?' : '&'));
        
        // Row template
        $rowtemplate = (isset($rowtpl) ? $modx->getChunk($rowtpl) : "");
        if ($rowtemplate == "") {
          $rowtemplate = '
            <div class="[+rowclass+]">
              <!-- Post identification -->
              <div class="nm_title">[+pagetitle+] | [+longtitle+]</div>
              <!-- Actions -->
              <div class="nm_button">
                <!-- Show -->
                <form name="formshow" method="post" action="[~[+id+]~]">
                  <input type="submit" class="button" name="show" value="[+show+]" />
                </form>
              </div>
              <div class="nm_button">
                <!-- Edit -->
                <form name="formedit" method="post" action="[~[+editformid+]~]">
                  <input name="editid" type="hidden" value="[+id+]" />
                  <input type="submit" class="button" name="edit" value="[+edit+]" />
                </form>
              </div>
              <div class="nm_button">
                <!-- Delete -->
                <form name="formdelete[+id+]" method="post" action="">
                  <input name="deleteid" type="hidden" value="[+id+]" />
                  <input type="submit" onclick="JavaScript: return doDelete[+id+]();" class="button" name="delete" value="[+delete+]" />
                </form>
              </div>
              <div class="nm_button">
                <!-- Move to top of list -->
                <form name="formrefresh" method="post" action="">
                  <input name="refreshid" type="hidden" value="[+id+]" />
                  <input type="submit" class="button" name="refresh" value="[+refresh+]" />
                </form>
              </div>
              <div class="nm_button">
                <!-- Hide/show in menu -->
                <form name="formhide" method="post" action="">
                  <input name="hidemenuvalue" type="hidden" value="[+hidemenuvalue+]" />
                  <input name="hidemenuid" type="hidden" value="[+id+]" />
                  <input type="submit" class="button" name="hidemenu" value="[+hidemenu+]" />
                </form>
              </div>
              <div class="nm_button">
                <!-- Publish/unpublish -->
                <form name="formpublish" method="post" action="">
                  <input name="publishvalue" type="hidden" value="[+publishvalue+]" />
                  <input name="publishid" type="hidden" value="[+id+]" />
                  <input type="submit" class="button" name="publish" value="[+publish+]" />
                </form>
              </div>
              <!-- Start next post on new row -->
              <span class="nm_eol"> </span>
            </div>';
        }
        
        // select resources  
        $tbl = $modx->getFullTableName('site_content');
        $rs = $modx->db->select("id, pagetitle, longtitle, published, parent, introtext, createdby, createdon, hidemenu", $tbl, "parent = $folder", "createdon DESC");
        if (!$rs) {
          $resource = array();
        }
        else {
          while ($row = $modx->db->getRow($rs)) {
            $resource[]= $row;
          }
        }
        $recordcount = count($resource);
        
        $createdon = time();
        
        $rownum = 0;
        $output = "";
        
        // Total number of posts to retrieve 
        $nrtotal = isset($total) ? $total : $recordcount;
        $limit = min( $recordcount, $nrtotal ); 	
        
        if ($recordcount < $nrposts)
        {
          $stop = $recordcount;
        } else {
          $stop = $nrposts;
        }
        
        if ($nrtotal > $recordcount) {
          $nrtotal = $recordcount;
        }
        
        // Start Pagination
        if ($paginate == 1) {
          if ($furls == 0) {
            $char = "&";
          } else if($furls == 1) {
            $char = "?";
          } else {
            $char = '&';
          }
          
          $currentpageid = $modx->documentIdentifier;
          $next = $start + $nrposts;
          
          $nextlink = "<a href='[~$currentpageid~]".$char."start=$next'>".$nxt."</a>";
          $previous = $start - $nrposts;
          $previouslink = "<a href='[~$currentpageid~]".$char."start=$previous'>".$prv."</a>";
          $limten = $nrposts + $start;
          if ($alwaysshow == 1) {
            $previousplaceholder = "<span class='nl_off'>".$prv."</span>";
            $nextplaceholder = "<span class='nl_off'>".$nxt."</span>";
          } else {
            $previousplaceholder = "";
            $nextplaceholder = "";
          }
          $split = "";
          if ($previous > -1 && $next < $nrtotal) $split = $prevnextsplitter;
          if ($previous > -1) $previousplaceholder = $previouslink;
          if ($next < $nrtotal) $nextplaceholder = $nextlink;
          if ($start < $nrtotal) $stop = $limten;
          $limiter = ($limten > $nrtotal) ? $nrtotal : $limten;
          
          $totalpages = ceil($nrtotal / $nrposts);
          
          for ($x = 0; $x < $totalpages; $x++) {
            $inc = $x * $nrposts;
            $display = $x + 1;
            if($inc != $start) {
              $pages .= "<a class=\"nl_page\" href='[~$currentpageid~]".$char."start=$inc'>$display</a>";
            } else {
              $pages .= "<span id=\"nl_currentpage\">$display</span>";
            }	
          }
          
          $modx->setPlaceholder('next', $nextplaceholder);
          $modx->setPlaceholder('previous', $previousplaceholder);
          $modx->setPlaceholder('prevnextsplitter', $split);
          $modx->setPlaceholder('start', $start+1);
          $modx->setPlaceholder('stop', $limiter);
          $modx->setPlaceholder('total', $nrtotal);
          $modx->setPlaceholder('pages', $pages);
          $modx->setPlaceholder('totalpages', $totalpages);	
        }
        // End Pagination
        
        if (isset($headertpl)) {
          $output .= $modx->mergePlaceholderContent($modx->mergeChunkContent($modx->getChunk($headertpl)));
        }
        
        $output .= (($recordcount < 1) ? $emptytext."\n" : '');  
        
        // For all articles
        for ($x = $start; $x < $stop; $x++, $rownum++) {
          if ($resource[$x]['createdby'] < 0) {
            // get web user name
            $tbl = $modx->getFullTableName("web_users");
          }
          else {
            // get manager user name
            $tbl = $modx->getFullTableName("manager_users");
          }
          $link = '';
        
          //perform the query
          $users = $modx->db->select("username", $tbl, "id = '".$resource[$x]['createdby']."'");
          $users_count = $modx->db->getRecordCount($users); 
          if ($users_count < 1) { 
            $username = "anonymous"; 
          } else { 
            $resourceuser = $modx->fetchRow($users); 
            $username     = $resourceuser['username']; 
          }
        
          // Check if user updated this item.
          // We do this here so we're sure that the user is enabled to perform this action,
          // otherwise one could directly call this page with &deleteid=n to cancel any page!
          $tbl= $modx->getFullTableName("site_content");
          
          if ($refreshid == $resource[$x]['id']) {
            $flds = array(
                      'createdon' => $createdon,
                                 );
            $modx->db->update($flds, $tbl, "id = $refreshid");
            nm_clear_cache();
            $modx->sendRedirect($modx->makeUrl($postid));
          }
        
          if ($deleteid == $resource[$x]['id']) {
            $modx->db->delete($tbl, "id = $deleteid");
            nm_clear_cache();
            $modx->sendRedirect($modx->makeUrl($postid));
          }
        
          if ($hidemenuid == $resource[$x]['id'] && $hidemenuvalue != "") {
            // User changed hidemenu 
            $flds = array(
                      'hidemenu' => $hidemenuvalue,
                                 );
            $modx->db->update($flds, $tbl, "id = $hidemenuid");
            nm_clear_cache();
            $modx->sendRedirect($modx->makeUrl($postid));
          }
            
          if ($publishid == $resource[$x]['id'] && $publishvalue != "") {
            $flds = array(
                      'published' => $publishvalue,
                                 );
            $modx->db->update($flds, $tbl, "id = $publishid");
            $modx->sendRedirect($modx->makeUrl($postid));
          }
        
          // Add function to confirm deletion of this article.
          $output .= '
            <script type="text/javascript" >
              function doDelete'.$resource[$x]['id'].'()
              {
                if(confirm("Delete the article \''.$resource[$x]['pagetitle'].' | '.$resource[$x]['longtitle'].'\'?"))
                {
                  return true;
                  // document.getElementById("formdelete'.$resource[$x]['id'].'").submit();
                }
                return false;
              }
            </script>';
            // End $output
        
          // Alternate background colors
          if ($rownum % 2 == 0) {
            $rowclassplaceholder = "nm_row_even";
          }
          else {
            $rowclassplaceholder = "nm_row_odd";
          }
        
          if ($resource[$x]['hidemenu'] == 1){
            $hidevalueplaceholder = '0';
            $hideplaceholder = $showinmenuplaceholder;
          } 
          else {
            $hidevalueplaceholder = '1';
            $hideplaceholder = $hideinmenuplaceholder;
          } 
          
          if ($resource[$x]['published'] == 1){
            $publishvalueplaceholder = '0';
            $publishplaceholder = $unpublishplaceholder;
          }
          else {
            $publishvalueplaceholder = '1';
            $publishplaceholder = $publishplaceholder;
          }
          
          // Set placeholders for document object
          foreach ($resource[$x] as $docVar => $docVarValue) {
            $modx->setPlaceholder($docVar, $docVarValue); 
          }
        
          // Placeholders for the row
          $modx->setPlaceHolder('rowclass', $rowclassplaceholder);
          $modx->setPlaceHolder('id', $resource[$x]['id']);
          $modx->setPlaceHolder('hidemenuvalue', $hidevalueplaceholder);
          $modx->setPlaceHolder('hidemenu', $hideplaceholder);
          $modx->setPlaceHolder('publishvalue', $publishvalueplaceholder);
          $modx->setPlaceHolder('publish', $publishplaceholder);
          $modx->setPlaceHolder('title', $resource[$x]['pagetitle']);
          $modx->setPlaceHolder('pagetitle', $resource[$x]['pagetitle']);
          $modx->setPlaceHolder('longtitle', $resource[$x]['longtitle']);
        
          // Set tv placeholders
          preg_match_all('~\[\+tv(.*?)\+\]~', $rowtemplate, $matches);
          $cnt = count($matches[1]);
          for($i = 0; $i < $cnt; $i++) {
            $value = $modx->getTemplateVarOutput($idname = array($matches[1][$i]), $docid = $resource[$x]['id'], $published = $resource[$x]['published']);
            $v = $value[$matches[1][$i]];
            $modx->setPlaceholder("tv".$matches[1][$i], $v); 
          }
          
          // Expand the chunk code, and replace Placeholders
          $output .= $modx->mergePlaceholderContent($modx->mergeChunkContent($rowtemplate));
        }
        
        if (isset($footertpl)) {
          $output .= $modx->mergePlaceholderContent($modx->mergeChunkContent($modx->getChunk($footertpl)));
        }
        
        return $output;