We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 6272
    • 95 Posts
    Считаю не удобным писать отдельный сниппет для вывода всех неопубликованных документов, хотя сделать это, видимо, на порядок проще smiley Чем сделать маленькую кнопку рядом с "Обновить дерево" в админке, которая будет переключать на "Только неопубликованные документы" и обратно на "Все документы".

    Вывести кнопку на экран можно дописав соотв. код в manager/frames/tree.php рядом с
    <td><a href="#" class="treeButton" id="Button4" onclick="top.mainMenu.reloadtree();" title="<?php echo $_lang['refresh_tree']; ?>"><?php echo $_style['refresh_tree']; ?></a></td>

    Дальше идет злая ява ))
    Упирается она, на сколько я понял, в простое обновление фрейма. Это уже в manager/frames/menu.php см. function reloadtree()

    Есть идеи где можно поискать саму выборку доков и формирование дерева? А то мозги от жары совсем сплавились ))
      • 1611
      • 591 Posts
      Offtopic: Везет вам! У нас, в Новосибирске, мозги от холода съежились. smiley

      А идея классная, надо подумать, как реализовать.

      UPD:
      Кстати, возможно сниппет не так и сложно сделать, посмотрите топик про DataGrid, по сути нужно написать правильный @SELECT из таблички.
      (Минусом является наличие отдельного шаблона, TV и страницы для вывода получвшегося списка)
        • 6272
        • 95 Posts
        Вот и я о чем. Костыль то я написал сейчас - что называется "пока руки не дойдут сделать по уму", но он крайне не удобен в обращении. Скину сюда пока его код, а если будет время и сделаю по уму - отпишусь.

        1. Создаем НЕ опубликованную страницу, дабы доступ к ней был возможен только после авторизации в админке.
        2. Отрубаем галочку "Использовать HTML-редактор" и пишем в контент:
        <script type="text/javascript" src="assets/templates/bluegrey/dtree.js"></script>
        <link rel="stylesheet" href="assets/templates/bluegrey/dtree.css" type="text/css"/>
        <a class="txno" href="javascript: d.openAll();">Раскрыть</a> | <a class="txno" href="javascript: d.closeAll();">Свернуть</a>
        <div class="dtree">
        <script type="text/javascript">
        <!--
        d = new dTree(’d’);
        d.add(0,-1,’ <b>Не опубликовано:</b>’);
        [[UnPubDoc]]
        document.write(d);
        //-->
        </script>
        </div>
        3. Код сниппета UnPubDoc:
        <?php
        $db_q="SELECT id,pagetitle,parent,published,isfolder,createdby,createdon,deleted FROM mx_site_content order by pagetitle asc";
        $result=mysql_query($db_q);
        $count=mysql_num_rows($result);
        $docs[0]='-';
        $doc_c=0;
        for ($i=0;$i<$count;$i++)
         {
           $id=mysql_result($result,$i,'id');
           $pagetitle=mysql_result($result,$i,'pagetitle');
           $parent =mysql_result($result,$i,'parent');
           $published=mysql_result($result,$i,'published');
           $isfolder=mysql_result($result,$i,'isfolder');
           $createdby=mysql_result($result,$i,'createdby');
           $createdon=mysql_result($result,$i,'createdon');
           $deleted=mysql_result($result,$i,'deleted');
           if (!in_array($id,$docs))
            {
        	 $ids[$doc_c]=$id;
        	 $pagetitles[$doc_c]=$pagetitle;
        	 $parents[$doc_c]=$parent;
        	 $publisheds[$doc_c]=$published;
        	 $isfolders[$doc_c]=$isfolder;
        	 $createdbys[$doc_c]=$createdby;
        	 $createdons[$doc_c]=$createdon;
        	 $deleteds[$doc_c]=$deleted;
        	 $doc_c++;
            }
         }
        for ($i=0;$i<$doc_c;$i++) {
        if ($isfolders[$i] == 1) {$q="SELECT id FROM mx_site_content WHERE parent='$ids[$i]' and published=0"; $res=mysql_query($q); $fcd=mysql_num_rows($res);}
         if ($publisheds[$i] == 0 or $isfolders[$i] == 1) {
             if ($publisheds[$i] == 0) {print("d.add(".$ids[$i].",".$parents[$i].",'<font color=#grey>".$pagetitles[$i]);}
             else {print("d.add(".$ids[$i].",".$parents[$i].",'".$pagetitles[$i]);}
        if ($fcd > 0) {print(' [<font color=#880000>'.$fcd.'</font>]');}
        if ($isfolders[$i] == 0) {print("</font>','manager/?a=3&id=".$ids[$i]."#'); ");}
        if ($isfolders[$i] == 1) {print("</font>','manager/?a=3&id=".$ids[$i]."#','','','assets/templates/bluegrey/images/dtree/folder.gif'); ");}
                                                                                           }
                                                       }
        ?>


        У меня работает и пока устраивает. То что написано коряво - извините, "как умею" = с учетом времени и желания. Если сделать по уму в админке не получится - костыль обязательно доделаю...

        P.S. Ява-скрипты древа брать отсюда.
          • 6272
          • 95 Posts
          Код сниппета UnPubDoc v0.21:
          <?php
          ### UnPubDoc Tree v0.21 by D.SID ###

          /* Пояснение фильтра:
          * $isfolders[$i] == 1 and $parents[$i] == 0
          * = Папка находящаяся в корне сайта
          * $isfolders[$i] == 1 and $fcd > 0
          * = Любая папка с неопуб. документами непосредственно в ней
          * $isfolders[$i] == 0 and $publisheds[$i] == 0
          * = Неопубликованный документ (не папка)
          *
          * Корректно работает с вложенностью документов второго уровня, например:
          * Оглавление / Папка в корне / Папка / Документ
          * С вложенностью глубже работать не будет! НЕ рабочий пример:
          * Оглавление / Папка в корне / Папка / Папка / Документ
          * Для работы с любой вложенностью
          * if ($isfolders[$i] == 1 and $parents[$i] == 0 or $isfolders[$i] == 1 and $fcd > 0 or $isfolders[$i] == 0 and $publisheds[$i] == 0)
          * замените на:
          * if ($publisheds[$i] == 0 or $isfolders[$i] == 1)
          * Минус: выводит ВСЕ папки, а не только папки с неопуб. документами.
          * Дорабатывать сие времени пока нет.
          * Да и мотивации: на моем сайте юзеры могут добавлять неопуб. документы только с вложенностью 2го уровня.
          *
          *
          * Для исключения папок и документов - пишем их ID через запятую примерно так:
          * [!UnPubDoc?exclude=`39,6,133,124,128,60`!]
          *
          * P.S. $createdby, $createdon, $deleted написаны "на вырост" = можно стереть.
          */

          if ($exclude !=’’) {
          $filid_fol = str_replace (","," and parent !=", ’,’.$exclude);
          $filid_doc = str_replace (","," and id !=", ’,’.$exclude);
          $filid_all = $filid_fol.$filid_doc;}

          $db_q="SELECT id,pagetitle,parent,published,isfolder,createdby,createdon,deleted FROM mx_site_content WHERE id !=0 $filid_all order by pagetitle asc";
          $result=mysql_query($db_q);
          $count=mysql_num_rows($result);
          $docs[0]=’-’;
          $doc_c=0;
          for ($i=0;$i<$count;$i++)
          {
          $id=mysql_result($result,$i,’id’);
          $pagetitle=mysql_result($result,$i,’pagetitle’);
          $parent=mysql_result($result,$i,’parent’);
          $published=mysql_result($result,$i,’published’);
          $isfolder=mysql_result($result,$i,’isfolder’);
          $createdby=mysql_result($result,$i,’createdby’);
          $createdon=mysql_result($result,$i,’createdon’);
          $deleted=mysql_result($result,$i,’deleted’);
          if (!in_array($id,$docs))
          {
          $ids[$doc_c]=$id;
          $pagetitles[$doc_c]=$pagetitle;
          $parents[$doc_c]=$parent;
          $publisheds[$doc_c]=$published;
          $isfolders[$doc_c]=$isfolder;
          $createdbys[$doc_c]=$createdby;
          $createdons[$doc_c]=$createdon;
          $deleteds[$doc_c]=$deleted;
          $doc_c++;
          }
          }
          for ($i=0;$i<$doc_c;$i++) {
          if ($isfolders[$i] == 1) {$q="SELECT id FROM mx_site_content WHERE parent=’$ids[$i]’ and published=0"; $res=mysql_query($q); $fcd=mysql_num_rows($res);}

          ### ФИЛЬТР:
          if ($isfolders[$i] == 1 and $parents[$i] == 0 or $isfolders[$i] == 1 and $fcd > 0 or $isfolders[$i] == 0 and $publisheds[$i] == 0) {

          if ($publisheds[$i] == 0) {print("d.add(".$ids[$i].",".$parents[$i].",’<font color=#grey>".$pagetitles[$i]);}
          else {print("d.add(".$ids[$i].",".$parents[$i].",’".$pagetitles[$i]);}
          if ($fcd > 0) {print(’ &#91;<font color=#880000>’.$fcd.’</font>&#93;’);}
          if ($isfolders[$i] == 0) {print("</font>’,’manager/?a=3&id=".$ids[$i]."#’); ");}
          if ($isfolders[$i] == 1) {print("</font>’,’manager/?a=3&id=".$ids[$i]."#’,’’,’’,’assets/templates/bluegrey/images/dtree/folder.gif’); ");}
          }
          }
          ?>

          UPD: Исправил некоторые мелочи.