We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 25463
    • 61 Posts
    Добрый день !
    Написал небольшой плагин, который осуществляет предпросмотр для дополнительных переменных, если у них тип-"изображение"

    Для установки достаточно создать новый плагин, назвать как угодно и повесить его на событие "OnDocFormRender"

    // Плагин предпросмотра для изображений.
    // Реагирует на событие OnDocFormRender
    
    $e = & $modx->Event;
    if ($e->name == 'OnDocFormRender')
    {
    
      //  Код текущего элемента
      $id = $_REQUEST['id'];
      
      // Узнаем код его шаблона
      $doc=&$modx->getDocument($id,'*');   
      $tpl=$doc['template'];
      
      // Получим значения всех его дополнительных переменных, которые имеют тип "image"
      $strSQL='select tv.name '.
              'from '.$modx->getFullTableName('site_tmplvars').' tv, '.$modx->getFullTableName('site_tmplvar_templates').' tp '.
              'where tv.id=tp.tmplvarid and tv.type="image" and tp.templateid='.$tpl;
              
             
      $output='';
      if ($result=$modx->dbQuery($strSQL))
      {
    
    // Для каждого элемента списка подготовить JavaScript
    
          while( $row = $modx->db->getRow( $result ))
          {
                $script='<script type="text/javascript"> '.
                
                // Функция, возвращающая название превьюшки по названию картинки
                'function getPreview(_imgName) '.
                '{ '.
                '    var previewimg=""; '.
                '    if (_imgName.length!=0) '.
                '    { '.
                '       var len=_imgName.length; '.
                '       var li=_imgName.lastIndexOf("/"); '.
                '       previewimg=_imgName.substring(0,li+1)+".thumb_"+_imgName.substring(li+1); '.
                '    }; '.
                '    return previewimg; '.
                '};'.
                
               // узнать ячейку таблицы в админке, где находится данный элемент управления
                'var imgtext=$("tv'.$row['name'].'"); '.           
                'var imgparent=imgtext.parentNode; '.
                
               // Добавить в родительскую ячейку элемент - изображение
                'var div=document.createElement("div"); '.
                'div.id="preview_'.$row['name'].'"; '.
                'div.innerHTML="<img id=\"image_'.$row['name'].'\" src=\"/"+getPreview(imgtext.value)+"\">"; '.
                'imgparent.appendChild(div); '.
                
                // Вычислить ID кнопки добавления картинки
                'var dlgbutton; '.
                
                'var oItem = imgparent.childNodes; '.
                'if (oItem!=null) { '.
                '    for (var i=0; i<oItem.length; i++) '.
                '        if ((oItem.item(i).tagName=="INPUT") && (oItem.item(i).type=="button")) '.
                '            dlgbutton=oItem.item(i); '.
                '}; '.
                
                // Обновление изображения по таймеру            
                'var TimerID; '.
                
                'function UpdateImage(var_name){ '.
                '    var newInnerHTML="<img id=\"image_"+var_name+"\" src=\"/"+getPreview($("tv"+var_name).value)+"\">"; '.
                '    var pdiv=$("preview_"+var_name); '.
                '    if (newInnerHTML!=$("preview_"+var_name).innerHTML){ '.
                '       $("preview_"+var_name).innerHTML=newInnerHTML; '.
                '       clearInterval(TimerID); '.
                '    } '.             
                '}; '.
    
                // При нажатии на кнопку добавления активируем таймер, который будет отслеживать, 
                // изменился ли текст в строке
                'dlgbutton.addEvent("click",function(){ '.
                '    TimerID=setInterval("UpdateImage(\"'.$row['name'].'\")",1000); '.
                '});   '. 
                
                // Обрабатывать ввод названия картинки с клавиатуры
                'imgtext.addEvent("keyup",function(){ '.
                '  var img0=$("tv'.$row['name'].'").value;  '.
                '  var len=img0.length; '.
                '  var li=img0.lastIndexOf("/"); '.
                '  var previewimg=img0.substring(0,li+1)+".thumb_"+img0.substring(li+1); '.
                '  $("preview_'.$row['name'].'").innerHTML="<img id=\"image_'.$row['name'].'\" src=\"/"+previewimg+"\">"; '.
                '}); '.
                '</script>';
            $output.=$script;
          }
       };
       
       
      $e->output($output);
         
    };
    


    P.S. Серьезной оптимизацией кода плагина пока не занимался.
      • 29487
      • 385 Posts
      А в чем отличия от Image TV Preview (ShowImageTVs 0.2.2), который идёт вместе с 0.9.6.3 ?
        • 25463
        • 61 Posts
        Действительно ... я этот плагин разрабатывал под версию 0.9.5.
        И как оказалось, он не совсем корректно работает под IE sad
        Но, в любом случае, он может в какой-то степени послужить учебным пособием для программистов начального и среднего уровня, изучающих разработку плагинов под MODx.
          • 1611
          • 591 Posts
          Зачем вам 0.9.5? Переходите уже на 0.9.6.3 — меньше дыр и больше дела. Особенно если применить все заплатки, которые нашел Temus и Akots за что им честь и хвала!
            • 25463
            • 61 Posts
            Уже перешел smiley
            А то был старый проект