
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.82] |
![]() |
|
Страницы: (4) 1 2 [3] 4 все ( Перейти к последнему сообщению ) |
![]() |
Сообщ.
#31
,
|
|
Если нужно создать простую таблицу с данными то можно воспользоваться компонентом HTML_Table который описан в vcl/PEAR/HTML/Table.php
простой пример использования: ![]() ![]() <?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(); ?> |
![]() |
Сообщ.
#32
,
|
|
Проблемы переноса проекта на хостинг проайдера
После создания проекта и его успешной отладки на локальном компьютере могут быть проблемы с переносом этого проета к провайдеру Приведу некоторые проблемы с которыми столкнулся я и их решения в основном эти проблемы из за не одинаковой настройки 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 ![]() ![]() <?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 ![]() ![]() <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 |
![]() |
Сообщ.
#33
,
|
|
Задача: Открыть из одного окна другое (модально) и вернуть значения из него только по закрытию окна.
Раз модальное окно, то соответственно первое в этот момент будет недоступно. Решение: (Проверено в IE) делаем в первом окне ![]() ![]() 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: ![]() ![]() <input type="button" value="добавить эту информацию о получателе в новый заказ" onClick="window.returnValue = ['555','666','777','888','999','000','111','222'];window.close();">' 2)вариант формы delphiforphp: ![]() ![]() function Button4JSClick($sender, $params) { ?> window.returnValue = ['555','666','777','888','999','000','111','222']; window.close(); <?php } |
Сообщ.
#34
,
|
|
|
Проблема:
Как связать 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 поддерживается |
![]() |
Сообщ.
#35
,
|
|
Задача: Доступ к свойствам компонента OpenGrid
Решение: 1.Получить значение 1-й колонки в текущей строке грида OpenGrid2 при выборе ячейки если у грида свойство readonly=1 ![]() ![]() function OpenGrid2JSCellSelect($sender, $params) { ?> //Add your javascript code here alert(jQuery('#OpenGrid2').getGridParam('selrow')); <?php } 2. Получить значения указанных колонок в текущей (выбранной) строке грида OpenGrid2 при выборе ячейки Работает это если у гида свойство readonly=1 Здесь вытаскиваются колонки с названием полей PR_ID,PR_DATE ![]() ![]() 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. Ещё несколько функций для доступу к параметрам грида ![]() ![]() 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)) заполнена всякими тестовыми значениями Раскрашиваем выбранную запись в гриде ![]() ![]() 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 } Пробежать по всем отображаемым строкам в гриде и раскрасить их по нужным критериям можно так ![]() ![]() 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) |
![]() |
Сообщ.
#36
,
|
|
Задача: Как сделать чтобы данные в ячейки переносились т.е. высота ячейки менялась в зависимости от длинны данных OpenGrid
Решение: смотрим здесь OpenGrid ,вставка новой записи в Detail Grid (сообщение #2549108) |
![]() |
Сообщ.
#37
,
|
|
Задача: Как сделать что бы при открытии модального окна информация основной страницы затенялась или скрывалась
Решение: (проверялось в IE, в остальных проверяем сами) 1.на форме unit1 компонент Window1 и кнопка Button1 и ещё чего нибудь для демонстрации работы накидай, ну там вторую кнопку, мемо... 2. в инспекторе Winow1->Modal = true; Button1->ButtonType = btNormal; 3. в коде вариант с затемнением ![]() ![]() 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 } вариант где скрываем основную страницу пока отображаем модальное окно ![]() ![]() 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 } |
![]() |
Сообщ.
#38
,
|
|
Задача: Нужно в окне Windows1 открыть страницу с другого сайта (или со своего сайта другую форму)
Решение: нужно поместить на форму окно Window1, на него панель Panel1, а к панели привязать событие ![]() ![]() ..... 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>'; } } ..... |
![]() |
Сообщ.
#39
,
|
|
Задача: сформировать список в Combobox
Решение: ![]() ![]() 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 |
![]() |
Сообщ.
#40
,
|
|
Задача: очистить свойство Text у всех компонент на форме
Решение: http://blog.onenerd.net/?p=69 ![]() ![]() function ClearAllTextBoxes () { try { foreach($this as $obj) { if(substr($obj->name,0,3)==”txt”) { $obj->Text = “”; } } } catch (Exception $e) {} } или ![]() ![]() function ClearAllTextBoxes () { reset($this->controls->items); while(list($key, $obj)=each($this->controls->items)) { if ($obj->inheritsFrom(”Edit”)) { $obj->Text = “”; } } } |
![]() |
Сообщ.
#41
,
|
|
Задача: добавить ссылку на файл .js в форму
Рещение: В событие OnShowHeader добавить ![]() ![]() echo “<script language=\”javascript\” src=\”../_lib/js/validate.js\”></script>”; Кроме того если у вас есть php библиотека функций, которую вы всегда включаете в страницы формы, добавьте туда следующую функцию: ![]() ![]() function JSInclude($js_path_and_filename) { echo “<script language=\”javascript\” src=\”{$js_path_and_filename}\”></script>\n”; } вызываем так ![]() ![]() JSInclude(”../lib/js/validate.js”); Добавлено Проблема: на одной кнопке висит два обработчика один php, а второй javascript Событие Javascript срабатывает, но до события php никода не доходим Решение: в конец обработчика javascript добавить return true; неправильно: ![]() ![]() function Button2Click($sender, $params) { echo “Мы никогда сюда не попадаем.”; } function Button2JSClick($sender, $params) { ?> //Add your javascript code here alert(”Это видим всегда”); <?php } правильно ![]() ![]() function Button2Click($sender, $params) { echo “И это теперь видим.”; } function Button2JSClick($sender, $params) { ?> //Add your javascript code here alert(”return true;”); return true; <?php } |
![]() |
Сообщ.
#42
,
|
|
Прблема: при переносе на провайдер проект н работает с компонентами ExtJS
Решение: на провайдере обычно нужнот учитывать регистр букв, в отличии от Windows меняем Ext на ext здесь: файл vcl/ext/functions.inc.php было так ![]() ![]() <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" /> стало так ![]() ![]() <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" /> |
![]() |
Сообщ.
#43
,
|
|
Проблема: не работает SimpleChart - не показывает график после добавления данных
Решение: после добавления компонента на форму проверить: порядок подключения модулей нужно так (закоментированное - это неправильно) ![]() ![]() /* 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"); |
![]() |
Сообщ.
#44
,
|
|
Задача: Динамически создать объекты на форме и прописать им события
Решение: вариант на примере динамического создания 10 чекбоксов с событием на JS Примечание: проверено в RadPHP XE, версия rpcl=289 На 2-й версии не сработало, но думаю что если обновить vcl до rpcl должно работать (во накрутили названий... ![]() ![]() ![]() <?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(); ?> |
![]() |
Сообщ.
#45
,
|
|
Задача: выполнить хранимую процедуру MySQL и получить результат в DbGrid
Решение: Хранимая процедура не работает (сообщение #2772214) |