Писане на плъгини/ + малко РНР
Богомил Шопов
конференция "Линукс за българи"
Въпроси?
- Можете да ме прекъснете по всяко време
- Ако се наложи - СТРЕЛЯЙТЕ (не в мене)
- ..или ми спрете микрофона.
това е тест
Защо да пиша плъгин?
- а) За да си имам?
- б) За да си имат?
- в) За да мога да се натегна на шефа...? нали?
- г) За да можем всички да имаме?
- (изпратете SMS с верния отговор до края на лекцията)
това е тест
Примери и малко теория
# Име
# Описание
# автор
#
# Кога е създаден
# Дата на последна редакция
#
# Статус
Примери и малко теория
# Spisanie
# Mozilla plugin for spisanie.com (bulgarian language)
# by Bogomil Shopov
#
# Created: February 24, 2005
# Latest update: February 24, 2005
#
# Status: Working
- Има си правила, но кой ли ги спазва...
- Малко плъгини са написани по изискванията
По нататък
<search
version="7.1"
name="име на плъгина"
description="описание"
action="къде се изпълнява търсенето"
searchForm="къде се намира формата за търсене"
method="метод">
По нататък
<input name="sourceid" value="Mozilla-search">
<input name="kwords" user="">
<interpret
resultListStart="<!-- маркер за начало на списък -->"
resultListEnd="<!-- маркер за край на списък -->"
resultItemStart="<!-- маркер за начало на съдържание -->"
resultItemEnd="<!-- маркер за край на съдържание -->">
</search>
и последно ...
<browser
update="URL за опресняване"
updateIcon="икона на плъгина"
updateCheckDays="период">
- Да това е то ;)))
- Лесно и бързо за правене
как се инсталира?
- Копиране в searchplugins на mozilla браузър
- Записва се в .src файл
- Изображение
как се инсталира?
function addEngine(name,ext,cat)
{
if ((typeof window.sidebar == "object") && (typeof
window.sidebar.addSearchEngine == "function"))
{
window.sidebar.addSearchEngine(
"http://spisanie.com/"+name+".src",
"http://spisanie.com/"+name+"."+ext,
name,
cat );
}
else
{
errorMsg(name,ext,cat);
}
}
как се инсталира?
<a href="#1" onclick="addEngine('spisanie','jpg','tutorials');">
Инсталирай ме </a>
- Име
- Изображение
- Тема на канала
Вадете лаптопите, ще пишем код..
<search
version="7.1"
name="Linux-bg.org"
description="Linux for Bulgarians"
action="http://linux-bg.org/cgi-bin/y/index.pl"
searchForm="http://linux-bg.org/cgi-bin/y/index.pl"
queryEncoding="windows-1251"
queryCharset="windows-1251"
method="GET">
oще малко код ...
<input name="act" value="big_search">
<input name="page" value="search">
<input name="keywords" user="">
....
- Sidebar
-
Ресурси
- БГ: http://sciforge.org/frs/?group_id=31&release_id=20
- http://mycroft.mozdev.org/
Факт: Mycroft is one of the most visited projects on mozdev.
Следва темата за РНР
Какво е РНР?
- Скриптов език? Да/Не
- Език за генериране на HTML? Да/Не
- Език от страната на сървъра? Да/Не
- Език от страната на клиента? Да/Не
- Идея си нямам! Да
За какво се ползва?
- Toва ли е приложението на езика?
- Тук Ви питам, а Вие отговаряте, нали?
За какво се ползва?
- Отговорът е ... Не
- Тук Вие ме питате, а Аз отговарям, нали...?
За какво няма да стане дума?
- За връзка с база данни
- За генериране на HTML
- За работа с файлове
- За начин на работа (обектен или процедурен)
- ... и за много други неша, които вие сигурно знаете по-добре и от мене
- А за какво сте дошли тук в събота?!?
Нека да започваме
- Да пишем десктоп приложения с РНР
- Какво е XML-RPC
Стига толкова въпроси
- Въпрос: Можем ли да правим десктоп приложения на РНР?
- Аз отивам да пия кафе. Вие помислете и кажете.
- Е ...? Може ли?
Да - е поне някой знае ;)
- Въпрос: А с какво?
- Аз вече отивам да бира. Вие пак помислете и кажете.
- Е ...?
Не - е поне никой незнае ;)
- Глас от залата: Кажи де...?
PHP-GTK
- Лесна инсталация
- Много примери
- Мулти - платформен : Работи на много ОС
- Андрей Змиевски
- Странен интерфейс
Инсталиране на PHP-GTK
- Сваляте пакетите от http://gtk.php.net (или от CVS-a)
- Разархивирате
- Тръгва
- Отваряте IDE
- Пишете и тествате
Как изглежда код на едно приложение на PHP-GTK
if (!class_exists('gtk')) {
if (strtoupper(substr(PHP_OS, 0,3) == 'WIN'))
dl('php_gtk.dll');
else
dl('php_gtk.so');
}
function delete_event()
{
return false;
}
function shutdown()
{
print("Shutting down...\n");
gtk::main_quit();
}
Има и още ...
function hello()
{
global $window;
print "Hello World!\n";
$window->destroy();
}
$window = &new GtkWindow();
$window->connect('destroy', 'shutdown');
$window->connect('delete-event', 'delete_event');
$window->set_border_width(10);
$button = &new GtkButton('Hello World!');
$button->connect('clicked', 'hello');
$window->add($button);
$window->show_all();
gtk::main();
Да видим как изглежда
Сигурно може и по-добре
- Скинове/Стилове
- Картинки
- Друго решение? ... има, разбира се
Нека да видим обаче какво може
да се прави с него
- Първо и най-важно: Всичко зависи от вашето въображение
- Решения за клиенти, IDE, пощенски клиенти ....
Комбинирането на екстеншъните на РНР със UI на GTK,
може да постигне 2 неща
- Да ви откаже от РНР ;)))
- Да ви накара да работите още повече с РНР ;)))
Как ще е при Вас?
Винаги в първото , но след това неминуемо идва второто
WinBinder
- Работи, само на Windows ;(
- Значително изглежда по-добре от PHP-GTK
- Лесен за работа
- OpenSource - Даааа
Схема на работа на WinBinder
Пример за писане
include("../inc/winbinder.php");
wb_create_window(NULL, PopupWindow, "Hello", 480, 320);
wb_main_loop();
Повече за него, можете да видите:
http://www.hypervisual.com/
winbinder/index.php
Дали има и друг начин да пишем
'визуално'
- Да ?
- Не ?
- Да го поставим на гласуване ...
PHP-NEWT
- РНР екстеншън за Newt библиотеката на RedHat
- Tя предлага следните елементи
- windows, buttons
checkboxes, radiobuttons,
labels, editboxes, scrolls,
textareas, scales, etc.
PHP-NEWT Пример
newt_init ();
newt_cls ();
newt_draw_root_text (0, 0, "Test Mode Setup Utility 1.12");
newt_push_help_line (null);
newt_draw_root_text (-30, 0, "(c) 1999-2002 RedHat, Inc");
newt_get_screen_size (&$rows, &$cols);
newt_open_window ($rows/2-17, $cols/2-10, 34, 17, "Choose a Tool");
$form = newt_form ();
$list = newt_listbox (3, 2, 10);
foreach (array (
"Authentication configuration",
"Firewall configuration",
"Mouse configuration",
"Network configuration",
"Printer configuration",
"System services") as $l_item)
PHP-NEWT Пример
{
newt_listbox_add_entry ($list, $l_item, $l_item);
}
$b1 = newt_button (5, 12, "Run Tool");
$b2 = newt_button (21, 12, "Quit");
newt_form_add_component ($form, $list);
newt_form_add_components ($form, array($b1, $b2));
newt_refresh ();
newt_run_form ($form);
newt_form_destroy ($f);
newt_pop_window ();
newt_finished ();
PHP-NEWT Резултат
PHP-NEWT Инсталиране
Не работи на Windows ;)))
- Убедете се, че имате инсталирана libnewt
- Свалете си последната версия: http://php-newt.sourceforge.net/index.php?p=download
- tar -xvzf newt-version.tar.gz
- cd newt-version
PHP-NEWT Инсталиране
Не работи на Windows ;))) (пак)
- PHPPREFIX=/path/where/is/your/phpize_script
- $PHPPREFIX/phpize
- ./configure --enable-newt=shared --with-php-config=$PHPPREFIX/php-config
- make
- make install
- добавяте в php.ini extension="newt.so"
Повече за него, можете да видите:
http://php-newt.sourceforge.net/
XML-RPC
- Какво е XML-RPC
- XML-RPC vs. SOAP
- Имплементации на РНР
- http://www.keithdevens.com/software/xmlrpc/
XML-RPC
- Протокол за извикване на отдалечени процедури
- Използва HTTP за транспортиране
- POST заявка с XML body
- XML-RPC е запазена марка на UserLand Software, Inc
XML-RPC Заявка
POST /RPC2 HTTP/1.0
User-Agent: Frontier/5.1.2 (WinNT)
Host: betty.userland.com
Content-Type: text/xml
Content-length: 181
<?xml version="1.0"?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param>
<value><i4>41</i4></value>
</param>
</params>
</methodCall>
XML-RPC:Услугата
<?php
$xmlrpc_methods = array();
$xmlrpc_methods['bogy.saberi'] = summ_Numbers;
$xmlrpc_methods['method_not_found'] = XMLRPC_method_not_found;
function summ_Numbers($a) {
$summ[] = $a[0]+$a[1];
XMLRPC_response(XMLRPC_prepare($summ),KD_XMLRPC_USERAGENT);
}
function XMLRPC_method_not_found($methodName){
XMLRPC_error("2", "The method you requested, " . $methodName
. ", was not found.", KD_XMLRPC_USERAGENT);
}
?>
XML-RPC: Сървъра
<?
require('inc/service.php');
require('inc/web_service_api.php');
$xmlrpc_request = XMLRPC_parse($GLOBALS['HTTP_RAW_POST_DATA']);
$methodName = XMLRPC_getMethodName($xmlrpc_request);
$params = XMLRPC_getParams($xmlrpc_request);
if(!isset($xmlrpc_methods[$methodName])){
$xmlrpc_methods['method_not_found']($methodName);
}else
{
$xmlrpc_methods[$methodName]($params);
}
?>
XML-RPC: Сървъра
<?php
require('service.php');
$fval="1";
$sval="20";
$s= XMLRPC_request("talk.spisanie.com", "/RPC/", "bogy.saberi",
array(XMLRPC_prepare($fval), XMLRPC_prepare($sval)));
echo "Result".$s[1][0];
?>
XML-RPC: Клиент
<?php
require('service.php');
$fval="1";
$sval="20";
$s= XMLRPC_request("talk.spisanie.com", "/RPC/", "bogy.saberi",
array(XMLRPC_prepare($fval), XMLRPC_prepare($sval)));
echo "Result".$s[1][0];
?>
Въпроси?
- Питайте ;)
- Нещо неясно?
- ... а нещо ясно?
от мен за вас
Благодаря Ви, много!