На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА
Прежде чем задать вопрос, зайдите в раздел FAQ, возможно там уже есть ответ на него.
Если вы хотите вставить код в сообщение, то пожалуйста выделяйте его тегом [code=dfp] ... [/сode].
Для этого используйте кнопку [code=dfp] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Delphi for PHP.
Модераторы: ViktorXP, vicis


Страницы: (4) 1 2 [3] 4  все  ( Перейти к последнему сообщению )  
> Delphi for PHP (RAD PHP XE, HTML5 Builder ): FAQ
    Если нужно создать простую таблицу с данными то можно воспользоваться компонентом HTML_Table который описан в vcl/PEAR/HTML/Table.php
    простой пример использования:
    ExpandedWrap disabled
      <?php
       
       require_once ('HTML/Table.php');
       
       $table = new HTML_Table();
       $table->setAttribute('border', 1);
       for ($x = 1; $x <= 9; $x++)
       {
         for ($y = 1; $y <= 9; $y++)
         {
            $table->setCellContents($x-1, $y-1, $x*$y);
         }
       }
       
       echo $table->toHtml();
       
      ?>
      Проблемы переноса проекта на хостинг проайдера

      После создания проекта и его успешной отладки на локальном компьютере могут быть проблемы с переносом этого проета к провайдеру
      Приведу некоторые проблемы с которыми столкнулся я и их решения
      в основном эти проблемы из за не одинаковой настройки php или apache

      1) у провайдера не была подключена библиотека с функциями фильтрации в php
      Проявлялось в виде сообщения типа: "The Input Filter PHP extension is not setup on this PHP installation, so the contents returned by Input is *not* filtered"
      удалось заставить подключить библиотеку путём предоставления примера, который не работал
      По phpinfo это не было видно (вроде бы), а программа выполненная на провайдере говорила, что функции не доступны
      на локальной же машине работало

      Пример в двух файлах:
      example04.php
      ExpandedWrap disabled
        <?php
        if (!filter_has_var(INPUT_POST, 'submit')) {
            echo "form";
            // include the form.
        }
         
        $age = filter_input(INPUT_POST, 'age', FILTER_VALIDATE_INT);
        if (is_null($age))
          {
            echo "Вы не ввели ничего(пустая переменная).<br />";
            require_once('index.php');
          }
          elseif ($age === FALSE)
          {
            echo "Введите число.<br />";
            require_once('index.php);
          }
          else
         
          {
            echo "Привет.<br/>";
            echo "<a href='test1.php'>В начало</a>.<br/>";
          }
        ?>


      index.php
      ExpandedWrap disabled
        <html>
        <head></head>
        <body >
        Проверка ввода числа
         
        <form action="example04.php" method="post" >
            Enter your age: <input name="age" size="2">
            <input type="submit" name="submit" value="Go">
            </form>
        </body>
        </html>


      2)У провайдера небыла установлена переменная output_buffering
      Проявлялось сообщением об ошибке в связи с тем что header уже послан
      это решили созданием в корне папки проекта файла .htaccess и занесением в него следующих строк:
      php_flag output_buffering On
      php_value output_buffering 4096
      Сообщение отредактировано: vicis -
        Задача: Открыть из одного окна другое (модально) и вернуть значения из него только по закрытию окна.
        Раз модальное окно, то соответственно первое в этот момент будет недоступно.
        Решение:
        (Проверено в IE) делаем в первом окне
        ExpandedWrap disabled
          function Unit12AfterShow($sender, $params)
          {
            echo "<script type=\"text/JavaScript\">
            function returnInfo1(p_obr,p_name,p_fam,p_adr,p_city,p_country,p_tlf,p_tlf2)
            {
               document.getElementById('p_obr').value = p_obr;
               document.getElementById('p_name').value = p_name;
               document.getElementById('p_fam').value = p_fam;
               document.getElementById('p_adr').value = p_adr;
               document.getElementById('p_city').value = p_city;
               document.getElementById('p_country').value = p_country;
               document.getElementById('p_tlf').value = p_tlf;
               document.getElementById('p_tlf2').value = p_tlf2;
            }
            </script>";
          }
           
          function Label3JSClick($sender, $params)
          {
            ?>
            res = window.showModalDialog("clientinfoz.php","","dialogHeight:576px; dialogWidth:616px;status=no");
            if(res!=null)
            {
               returnInfo1(res[0],res[1],res[2],res[3],res[4],res[5],res[6],res[7]);
            }
            <?php
          }


        Возвращаем из второго окна (при этом закрываем его)
        1)вариант с обычным html:
        ExpandedWrap disabled
           <input type="button" value="добавить эту информацию о получателе в новый заказ"  
             onClick="window.returnValue = ['555','666','777','888','999','000','111','222'];window.close();">'

        2)вариант формы delphiforphp:
        ExpandedWrap disabled
                         function Button4JSClick($sender, $params)
                         {
                         ?>
                         window.returnValue = ['555','666','777','888','999','000','111','222'];
                         window.close();
                         <?php
                         }
        Сообщение отредактировано: vicis -
          Проблема:
          Как связать D4php и Firebird?

          Решение:
          Хоть и официально D4php поддерживает FB, но у многих подключиться с помощью компонента Database не получается. Поэтому был применен следующий подход.
          0. Если установлен Interbase или иная программа, которая юзает библиотеку GDS32.DLL, то останавливаем ее.
          1. Устанавливаем FB с отмеченной галочкой о библиотеке GDS32.DLL
          2. Идем по пути %systemroot%\system32\ и копируем библиотеку GDS32.DLL в
          2.1 C:\Program Files\CodeGear\Delphi for PHP\2.0\apache2\bin\
          2.2 C:\Program Files\CodeGear\Delphi for PHP\2.0\
          2.3 C:\Program Files\CodeGear\Delphi for PHP\2.0\packages\
          2.4 C:\Program Files\CodeGear\Delphi for PHP\2.0\php\
          3. Все готово. Для связки D4php и Firebird используем Interbase компоненты.

          Примечание: Решения для использования ролей пока не найдено.

          Это сообщение было перенесено сюда или объединено из темы "Firebird + D4php"

          Примечание 2: В 3-й версии пишут что Firebird поддерживается
          Сообщение отредактировано: vicis -
            Задача: Доступ к свойствам компонента OpenGrid
            Решение:
            1.Получить значение 1-й колонки в текущей строке грида OpenGrid2 при выборе ячейки
            если у грида свойство readonly=1


            ExpandedWrap disabled
              function OpenGrid2JSCellSelect($sender, $params)
              {
               
                ?>
                //Add your javascript code here
                alert(jQuery('#OpenGrid2').getGridParam('selrow'));
               
                <?php
               
              }



            2. Получить значения указанных колонок в текущей (выбранной) строке грида OpenGrid2 при выборе ячейки
            Работает это если у гида свойство readonly=1
            Здесь вытаскиваются колонки с названием полей PR_ID,PR_DATE

            ExpandedWrap disabled
              function OpenGrid2JSCellSelect($sender, $params)
              {
               
                ?>
                //Add your javascript code here
               
                var id = jQuery("#OpenGrid2").getGridParam('selrow');
                if (id)
                {
                  var ret = jQuery("#OpenGrid2").getRowData(id);
                  alert("column pr_id="+ret.PR_ID+" column pr_date="+ret.PR_DATE+"...");
                }
                else { alert("Please select row");}
               
                <?php
               
              }



            3. Ещё несколько функций для доступу к параметрам грида

            ExpandedWrap disabled
               function Button2JSClick($sender, $params)
              {
               
                ?>
                //Add your javascript code here
                alert(jQuery('#OpenGrid2').getGridParam('url'));  // зачем это не понял пока
                alert(jQuery('#OpenGrid2').getGridParam('sortname')); // имя колонки в гриде по которой сейчас отсортированы данные
                alert(jQuery('#OpenGrid2').getGridParam('sortorder')); // порядок сортировки
                alert(jQuery('#OpenGrid2').getGridParam('selrow'));  // значение первой колонки в строке
                alert(jQuery('#OpenGrid2').getGridParam('page'));  // номер отображаемой страницы
                alert(jQuery('#OpenGrid2').getGridParam('rowNum')); // по сколько записей выводится на странице
                alert(jQuery('#OpenGrid2').getGridParam('datatype'));  // тип данных
                alert(jQuery('#OpenGrid2').getGridParam('records'));   // количесто записей в таблице базы данных
               
                <?php
               
              }


            4. Реализовать связку master-detail
            Описано здесь установить easyGrid, OpenGrid (сообщение #2399428)

            5. Раскраска грида по значениям ячеек

            исходные данные для примера: таблица с полями TEST_ID (integer), TEST_NAME (varchar(20))
            заполнена всякими тестовыми значениями

            Раскрашиваем выбранную запись в гриде


            ExpandedWrap disabled
              function Button1JSClick($sender, $params)
              {
                ?>
               
                //Add your javascript code here
                var id = jQuery('#OpenGrid1').getGridParam('selrow');
                var ret = jQuery('#OpenGrid1').getRowData(id);
                //alert("TEST_ID="+ret.TEST_ID+" TEST_NAME="+ret.TEST_NAME+"...");
               
                //тут надо вставить анализ данных и в зависимости от них окрашивать строку другим цветом
               
                // шрифт в выбранной ячейке красим в нужный цвет
                jQuery("#OpenGrid1").setCell(id,'TEST_NAME','',{'color':'#FF00FF'});    
                // фон в выбранной ячейке красим в нужный цвет
                jQuery("#OpenGrid1").setCell(id,'TEST_ID','',{'background-color': '#999999'});    
                // меняем атрибуты шрифта в выбранной ячейке
                jQuery("#OpenGrid1").setCell(id,'TEST_ID','',{'color':'#FF00FF', 'font-weight':'bold'},{'title': 'это не меняет ничего!'});    
               
                <?php
              }



            Пробежать по всем отображаемым строкам в гриде и раскрасить их по нужным критериям можно так

            ExpandedWrap disabled
              function Button3JSClick($sender, $params)
              {
                ?>
                //Add your javascript code here
                var ids = jQuery("#OpenGrid1").getDataIDs(); // получаем массив ID
                for(var i=0;i < ids.length;i++)   //бежим по всем отображаемым строкам грида
                {
                  var id_value = ids[i];    // получаем значение перво колонки очередной строки
                  var ret = jQuery("#OpenGrid1").getRowData(id_value);    // получаем объект со значениями полей
                  //  alert('Строка№ '+i+', значение перовой колонки='+ id_value+' поле TEST_ID='+ret.TEST_ID+' поле TEST_NAME='+ret.TEST_NAME);
                  if (ret.TEST_NAME=='eee') // проверяем на значение = eee
                  {
                    // фон в выбранной ячейке красим в нужный цвет
                    jQuery("#OpenGrid1").setCell(id_value,'TEST_NAME','',{'background-color': '#999999'});    
                  }
                  if (ret.TEST_ID in [1,5]) // проверяем на значения 1 и 5
                  {
                    // фон в выбранной ячейке красим в нужный цвет
                    jQuery("#OpenGrid1").setCell(id_value,'TEST_NAME','',{'background-color': '#999999'});    
                  }
                }
               
                <?php
               
              }



            Пробежать по всем отображаемым строкам в гриде и раскрасить их по нужным критериям сразу при отображении грида
            можно если предыдущий код вставить в событие OpenGrid1JSGridComplete

            6. Получить получить значение ячейки из указанной по имени колонки и строки с указанным значением
            описано здесь плучить значение ячейки в OpenGrid (сообщение #2613574)
            Сообщение отредактировано: vicis -
              Задача: Как сделать чтобы данные в ячейки переносились т.е. высота ячейки менялась в зависимости от длинны данных OpenGrid
              Решение: смотрим здесь OpenGrid ,вставка новой записи в Detail Grid (сообщение #2549108)
              Сообщение отредактировано: vicis -
                Задача: Как сделать что бы при открытии модального окна информация основной страницы затенялась или скрывалась
                Решение: (проверялось в IE, в остальных проверяем сами)
                1.на форме unit1 компонент Window1 и кнопка Button1
                и ещё чего нибудь для демонстрации работы накидай, ну там вторую кнопку, мемо...

                2. в инспекторе Winow1->Modal = true;
                Button1->ButtonType = btNormal;

                3. в коде
                вариант с затемнением
                ExpandedWrap disabled
                                 function Button1JSClick($sender, $params)
                                 {
                   
                                 ?>
                                 //Add your javascript code here
                                  document.getElementById('unit1').style.background = 'gray'; // перекрашиваем форму
                                  Window1.show(); // открывем модальное окно (всё остальное блокируется пока окно открыто)
                   
                                 <?php
                   
                                 }
                   
                                 function Window1JSClose($sender, $params)
                                 {
                   
                                 ?>
                                 //Add your javascript code here
                                  document.getElementById('unit1').style.background = ''; // перекрашиваем форму назад
                                  // здесь возможно нужно восстанавличать цвет, а ранее его запоминать в какой то переменной, но в простом случае работает и так
                                 <?php
                   
                                 }



                вариант где скрываем основную страницу пока отображаем модальное окно
                ExpandedWrap disabled
                                 function Button1JSClick($sender, $params)
                                 {
                   
                                 ?>
                                 //Add your javascript code here
                                  document.getElementById('unit1').style.display = 'none';  //block - отображает страницу или элемент, а none прячет
                                  Window1.show(); // открывем модальное окно (всё остальное блокируется пока окно открыто)
                   
                                 <?php
                   
                                 }
                   
                                 function Window1JSClose($sender, $params)
                                 {
                   
                                 ?>
                                 //Add your javascript code here
                                  document.getElementById('unit9').style.display = 'block';  //block - отображает страницу или элемент, а none прячет
                                 <?php
                   
                                 }
                Сообщение отредактировано: vicis -
                  Задача: Нужно в окне Windows1 открыть страницу с другого сайта (или со своего сайта другую форму)
                  Решение:
                  нужно поместить на форму окно Window1, на него панель Panel1, а к панели привязать событие

                  ExpandedWrap disabled
                    .....
                            class Unit2 extends Page
                            {
                                   public $Panel1 = null;
                                   public $Window1 = null;
                                   function Panel1Show($sender, $params)
                                   {
                     
                                  
                                           echo '<iframe src ="http://forums.delphi-php.net/" height="100%" width="100%"></iframe>';
                     
                                           // а так грузиш свою другую форму
                                           //echo '<iframe src ="Unit3.php" height="100%" width="100%"></iframe>';
                     
                                   }
                     
                            }
                    .....
                    Задача: сформировать список в Combobox
                    Решение:
                    ExpandedWrap disabled
                      public function GetList($TempQuery,$ComboBox,$DataField)
                      {
                        $TempQuery->close();
                        $TempQuery->open();
                        $TempQuery->first();
                        $ComboBox->Clear();
                        while (!$TempQuery->eof)
                        {
                           $ComboBox->AddItem($TempQuery->$DataField);
                           $TempQuery->next();
                         }
                      }
                       
                       
                      //вызываем так
                       
                      $this->TempQuery->SQL = 'select Car_RegNum as xName from car order by Car_RegNum';
                      GetListAuto($this->TempQuery,$this->ComboBox1, Car_RegNum );


                    Тема решения: ComboBox
                    Сообщение отредактировано: ViktorXP -
                      Задача: очистить свойство Text у всех компонент на форме
                      Решение: http://blog.onenerd.net/?p=69
                      ExpandedWrap disabled
                        function ClearAllTextBoxes ()
                        {
                        try {
                        foreach($this as $obj) {
                        if(substr($obj->name,0,3)==”txt”) {
                        $obj->Text = “”;
                        }
                        }
                        } catch (Exception $e) {}
                        }


                      или

                      ExpandedWrap disabled
                        function ClearAllTextBoxes ()
                        {
                        reset($this->controls->items);
                        while(list($key, $obj)=each($this->controls->items)) {
                        if ($obj->inheritsFrom(”Edit”)) {
                        $obj->Text = “”;
                        }
                        }
                        }
                      Сообщение отредактировано: vicis -
                        Задача: добавить ссылку на файл .js в форму
                        Рещение:
                        В событие OnShowHeader добавить

                        ExpandedWrap disabled
                          echo “<script language=\”javascript\” src=\”../_lib/js/validate.js\”></script>”;


                        Кроме того если у вас есть php библиотека функций, которую вы всегда включаете в страницы формы, добавьте туда следующую функцию:
                        ExpandedWrap disabled
                          function JSInclude($js_path_and_filename) {
                          echo “<script language=\”javascript\” src=\”{$js_path_and_filename}\”></script>\n”;
                          }


                        вызываем так
                        ExpandedWrap disabled
                          JSInclude(”../lib/js/validate.js”);


                        Добавлено
                        Проблема: на одной кнопке висит два обработчика один php, а второй javascript
                        Событие Javascript срабатывает, но до события php никода не доходим
                        Решение:
                        в конец обработчика javascript добавить return true;

                        неправильно:
                        ExpandedWrap disabled
                          function Button2Click($sender, $params)
                          {
                          echo “Мы никогда сюда не попадаем.”;
                          }
                          function Button2JSClick($sender, $params)
                          {
                          ?>
                          //Add your javascript code here
                          alert(”Это видим всегда”);
                          <?php
                          }


                        правильно
                        ExpandedWrap disabled
                          function Button2Click($sender, $params)
                          {
                          echo “И это теперь видим.”;
                          }
                          function Button2JSClick($sender, $params)
                          {
                          ?>
                          //Add your javascript code here
                          alert(”return true;”);
                          return true;
                          <?php
                          }
                        Сообщение отредактировано: vicis -
                          Прблема: при переносе на провайдер проект н работает с компонентами ExtJS
                          Решение: на провайдере обычно нужнот учитывать регистр букв, в отличии от Windows

                          меняем Ext на ext здесь:
                          файл vcl/ext/functions.inc.php

                          было так
                          ExpandedWrap disabled
                            <link rel="stylesheet" type="text/css" href="<?php echo VCL_HTTP_PATH; ?>/Ext/library/resources/css/ext-all.css" />
                            <script type="text/javascript" src="<?php echo VCL_HTTP_PATH; ?>/Ext/library/adapter/ext/ext-base.js"></script>
                            <script type="text/javascript" src="<?php echo VCL_HTTP_PATH; ?>/Ext/library/ext-all.js"></script>
                            <script type="text/javascript" src="<?php echo VCL_HTTP_PATH; ?>/Ext/library/examples/examples.js"></script>
                            <link rel="stylesheet" type="text/css" href="<?php echo VCL_HTTP_PATH; ?>/Ext/library/examples/examples.css" />


                          стало так
                          ExpandedWrap disabled
                            <link rel="stylesheet" type="text/css" href="<?php echo VCL_HTTP_PATH; ?>/ext/library/resources/css/ext-all.css" />
                            <script type="text/javascript" src="<?php echo VCL_HTTP_PATH; ?>/ext/library/adapter/ext/ext-base.js"></script>
                            <script type="text/javascript" src="<?php echo VCL_HTTP_PATH; ?>/ext/library/ext-all.js"></script>
                            <script type="text/javascript" src="<?php echo VCL_HTTP_PATH; ?>/ext/library/examples/examples.js"></script>
                            <link rel="stylesheet" type="text/css" href="<?php echo VCL_HTTP_PATH; ?>/ext/library/examples/examples.css" />
                            Проблема: не работает SimpleChart - не показывает график после добавления данных
                            Решение: после добавления компонента на форму проверить:
                            порядок подключения модулей

                            нужно так (закоментированное - это неправильно)
                            ExpandedWrap disabled
                              /*
                              require_once("rpcl/rpcl.inc.php");
                              use_unit("forms.inc.php");
                              use_unit("extctrls.inc.php");
                              use_unit("stdctrls.inc.php");
                              use_unit("chart.inc.php");  // <= это неправильно
                              */
                              require_once("rpcl/rpcl.inc.php");
                              use_unit("chart.inc.php");  // <= это правильно
                              use_unit("forms.inc.php");
                              use_unit("extctrls.inc.php");
                              use_unit("stdctrls.inc.php");
                              Задача: Динамически создать объекты на форме и прописать им события
                              Решение: вариант на примере динамического создания 10 чекбоксов с событием на JS
                              Примечание: проверено в RadPHP XE, версия rpcl=289
                              На 2-й версии не сработало, но думаю что если обновить vcl до rpcl должно работать (во накрутили названий...:) )
                              ExpandedWrap disabled
                                <?php
                                require_once("rpcl/rpcl.inc.php");
                                //Includes
                                use_unit("forms.inc.php");
                                use_unit("extctrls.inc.php");
                                use_unit("stdctrls.inc.php");
                                 
                                //Class definition
                                class Page2 extends Page
                                {
                                    public $Panel1 = null;
                                    function Page2StartBody($sender, $params)
                                    {
                                      for($i = 1; $i <= 10; $i++)
                                      {
                                 
                                         $xch = new Checkbox($this);
                                         $xch->Left = 10;
                                         $xch->Top = $i * 20;
                                         $xch->Name = 'chb_' . $i;
                                         $xch->Caption = $xch->Name;
                                         $xch->setjsOnClick("ChbJSClick($xch->Name)");
                                         $xch->Parent = $this->Panel1;
                                        // $xch->show();
                                      }
                                    }
                                    function Page2BeforeShow($sender, $params)
                                    {
                                    echo"
                                     <script type=\"text/JavaScript\">
                                     function ChbJSClick(thisobject)
                                     {
                                     alert(thisobject.name+' отмечено: '+thisobject.checked);
                                     }
                                     </script>
                                    ";
                                    }
                                 
                                }
                                 
                                 
                                global $application;
                                 
                                global $Page2;
                                 
                                //Creates the form
                                $Page2 = new Page2($application);
                                 
                                //Read from resource file
                                $Page2->loadResource(__FILE__);
                                 
                                //Shows the form
                                $Page2->show();
                                 
                                ?>
                                Задача: выполнить хранимую процедуру MySQL и получить результат в DbGrid
                                Решение: Хранимая процедура не работает (сообщение #2772214)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (4) 1 2 [3] 4  все




                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0560 ]   [ 16 queries used ]   [ Generated: 28.03.24, 19:41 GMT ]