<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>moduly &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/moduly/</link>
	<description>Feed of posts on WordPress.com tagged "moduly"</description>
	<pubDate>Sun, 06 Dec 2009 18:25:57 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Drupal module tutorial pt.2]]></title>
<link>http://mstandio.wordpress.com/2009/04/05/drupal-module-tutorial-pt2/</link>
<pubDate>Sun, 05 Apr 2009 01:34:47 +0000</pubDate>
<dc:creator>mstandio</dc:creator>
<guid>http://mstandio.wordpress.com/2009/04/05/drupal-module-tutorial-pt2/</guid>
<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; Druga część zmagań z Drupalem, implementacja bloku z formularzem, wraz z ob]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>&#160;&#160;&#160;&#160; Druga część zmagań z Drupalem, implementacja bloku z formularzem, wraz z obsługą błędów, zapisem do bazy i wyświetlaniem komunikatów. Formularz korzysta z AHAH i JQuery, jakkolwiek działa także bez wsparcia JavaScriptu. Całość nie jest dopieszczona wizualnie, ale działa bez zarzutu ;]</p>
<pre class="brush: jscript;">
$(document).ready(function(){
    $(&quot;input#edit-email-subscribtion&quot;).focus(function(){
        $(this).val(&quot;&quot;);
    });
});
</pre>
<p>&#160;&#160;&#160;&#160;Prosta funkcja JQuery umieszczona w pliku &#8220;custom_newsletter.js&#8221; w folderze modułu. Jeżeli po załadowaniu strony zostanie zaznaczone pole o id=&#8221;edit-email-subscribtion&#8221; jego wartość zostanie ustawiona na pustą. Pozostałe fragmenty kodu należą do &#8220;custom_newsletter.module&#8221;</p>
<pre class="brush: php;">
function custom_newsletter_init() {
  drupal_add_js(drupal_get_path('module', 'custom_newsletter') .'/custom_newsletter.js');
}
</pre>
<p>&#160;&#160;&#160;&#160;Funkcja dodaje do nagłówków stron, w których używany jest moduł, link do powyższego pliku z JavaScriptem.</p>
<pre class="brush: php;">
function custom_newsletter_block($op = 'list', $delta = 0, $edit = array()) {
  switch ($op) {
    case 'list':
      $block[0] = array(
        'info' =&gt; t('Subscription block'),
      );
      return $block;

    case 'view': default:
      if ($delta==0) {
        $block['subject'] = t('Newsletter');
        $block['content'] = custom_newsletter_contents();
      }
      return $block;
  }
}
</pre>
<p>&#160;&#160;&#160;&#160;Funkcja deklarująca wyświetlany blok, część &#8220;list&#8221; odpowiada za wyświetlanie bloku w liście bloków, &#8220;view&#8221; determinuje jego wygląd na stronie. Więcej na: <a href="http://api.drupal.org/api/function/hook_block/6" target="_BLANK">hook_block</a></p>
<pre class="brush: php;">
function custom_newsletter_contents(){
  $msgfield = &quot;&lt;div id=custom_subscribtion_msgfield&gt;&quot;.
                custom_newsletter_build_message(variable_get('subscribtion_state','')).
              &quot;&lt;/div&gt;&quot;;
  $contents = &quot;&lt;div&gt;&quot;.$msgfield.drupal_get_form('custom_newsletter_form').&quot;&lt;/div&gt;&quot;;
  variable_del('subscribtion_state');
  return $contents;
}
</pre>
<p>&#160;&#160;&#160;&#160;Funkcja wywoływana w celu wypełnienia bloku zawartością. Zawiera diva wyświetlającego komunikaty, oraz wywołanie funkcji generującej formularz.</p>
<pre class="brush: php;">
function custom_newsletter_build_message($message){
  return '&lt;hr /&gt;'.$message.'&lt;hr /&gt;';
}
</pre>
<p>&#160;&#160;&#160;&#160;Poglądowa wersja tworzenia komunikatu na podstawie wartości zadeklarowanej zmiennej. Przydałoby się zróżnicowanie komunikatów pod kątem treści i wyglądu, może kiedyś ;]</p>
<pre class="brush: php;">
function custom_newsletter_form(){
  $form['email_subscribtion'] = array(
  '#type' =&gt; 'textfield',
  '#default_value' =&gt; t('enter email here'),
  '#size' =&gt; 20,
  '#maxlength' =&gt; 30,
  '#element_validate' =&gt; array('subscribtion_form_validate'),

  );

  $form['submit'] = array(
  '#type' =&gt; 'submit',
  '#value' =&gt; t('Subscribe'),
  '#submit' =&gt; array('custom_newsletter_form_submit'),

  '#ahah' =&gt; array(
        'path' =&gt; 'custom_newsletter/js',
        'wrapper' =&gt; 'custom_subscribtion_msgfield',
  		'method' =&gt; 'replace',
        'progress' =&gt; array('type' =&gt; 'throbber',),
  ),
  );
  return($form);
}
</pre>
<p>&#160;&#160;&#160;&#160;Deklaracja poszczególnych pól formularza, przypisanie im właściwości oraz funkcji wywoływanych w celu walidacji pól oraz po zatwierdzeniu formularza. Sekcja #ahah określa reakcję na zatwierdzenie bez przeładowywania strony, określa kolejno link pod którym są opisane owe reakcje, następnie element zmieniany podczas działania funkcji, metodę zmiany oraz animację. Więcej na: <a href="http://api.drupal.org/api/file/developer/topics/forms_api_reference.html" target="_BLANK">form API</a></p>
<pre class="brush: php;">
function custom_newsletter_menu() {
  $items = array();
  $items['custom_newsletter/js'] = array(
    'title' =&gt; 'Javascript Choice Form',
    'page callback' =&gt; 'custom_newsletter_js',
    'access arguments' =&gt; array('access custom_newsletter js'),
    'type' =&gt; MENU_CALLBACK,
  );
  return $items;
}
</pre>
<p>&#160;&#160;&#160;&#160;Funkcja tworzy element menu (http://localhost/drupal/?q=custom_newsletter/js), pod którym znajduje się funkcja wywoływana po zatwierdzenia formularza z użyciem AHAH.  </p>
<pre class="brush: php;">
function custom_newsletter_js(){
    $form_state = array('storage' =&gt; NULL, 'submitted' =&gt; FALSE);
    $form_build_id = $_POST['form_build_id'];
    // Get the form from the cache.
    $form = form_get_cache($form_build_id, $form_state);
    $args = $form['#parameters'];
    $form_id = array_shift($args);
    // We will run some of the submit handlers so we need to disable redirecting.
    $form['#redirect'] = FALSE;
    // We need to process the form, prepare for that by setting a few internals
    // variables.
    $form['#post'] = $_POST;
    $form['#programmed'] = FALSE;
    $form_state['post'] = $_POST;
    // Build, validate and if possible, submit the form.
    drupal_process_form($form_id, $form, $form_state);
    // This call recreates the form relying solely on the form_state that the
    // drupal_process_form set up.
    $form = drupal_rebuild_form($form_id, $form_state, $args, $form_build_id);
    // Render the new output.

    $coumunicate = custom_newsletter_build_message(variable_get('subscribtion_state',''));
    variable_del('subscribtion_state');
    return drupal_json(array('status' =&gt; TRUE, 'data' =&gt; $coumunicate));
}
</pre>
<p>&#160;&#160;&#160;&#160;Funkcja pełna kodu świadczącego o kulawości AHAH, formularz należy najpierw zrekonstruować z keszu aby go zwalidować i zatwierdzić. Brzydki kod który nie wiadomo jak się zachowa przy kilku formularzach. Zwraca element json modyfikujący element określony w deklaracji formularza w sekcji ahah.</p>
<pre class="brush: php;">
function custom_newsletter_form_submit($form, &amp;$form_state){
  $form_values = $form_state['values'];
  $email=$form_values['email_subscribtion'];
  db_query(&quot;INSERT INTO {custom_newsletter} (id, email, hash) VALUES (%d, '%s', '%s')&quot;, 0, $email, substr(md5($email.time()),0,19));
}
</pre>
<p>&#160;&#160;&#160;&#160;Funkcja wymieniona w deklaracji formularza, poza przekazaniem wartości pola formularza, warto zwrócić uwagę na  <a href="http://api.drupal.org/api/group/database/6" target="_BLANK">database abstraction layer.</a></p>
<pre class="brush: php;">
function subscribtion_form_validate($element, &amp;$form_state) {
  if (empty($element['#value'])) {
    variable_set('subscribtion_state', 'ERROR');
    form_set_error('email_subscribtion', '', TRUE);
  }else{
    variable_set('subscribtion_state', 'OK');
  }
}
</pre>
<p>&#160;&#160;&#160;&#160;Jest to funkcja wymieniona w deklaracji formularza, kod jest poglądowy, przydałoby się sprawdzanie regexem, oraz dublowania wpisów. Formularz nie zostaje zatwierdzony, jeżeli zostanie wywołana funkcja form_set_error. W tym przypadku pole wiadomości jest puste, żeby nie wyświetlać komunikatu błędu u góry strony.</p>
<p>&#160;&#160;&#160;&#160;Pisanie w Drupal API potrafi być dość przyjemne kiedy już wiadomo o co chodzi. Człowiek staje się wygodny, tym bardziej dziwi toporność AHAH. Standardowe komunikaty błędów pojawiające się na górze strony nie są domyślnie obsługiwane przez AHAH i ich ewentualne wyświetlenie następuje dopiero po ręcznym przeładowaniu strony. Ponadto jego używanie jest tak mało intuicyjne, że aż powstał moduł mający temu zaradzić (<a href="http://wimleers.com/blog/ahah-helper-module" target="_BLANK">AHAH helper module</a>).<br />
&#160;&#160;&#160;&#160;Poza tym w kodzie widać moje pierwsze próby przekazywania zmiennych za pomocą funkcji <a href="http://api.drupal.org/api/function/variable_set/6" target="_BLANK">variable_set()</a>. Zmienne te są przechowywane w bazie i częste operacje na nich są zapewne mało efektywne, choć pewnie nie mają alternatywy w przypadku operacji AJAXowych.<br />
&#160;&#160;&#160;&#160;Warto zaopatrzyć się w moduł <a href="http://drupal.org/project/cache_disable" target="_BLANK">Cache Disable</a>, wyłącza keszowanie bloków i elementów menu. Spowalnia to działanie całości, ale ułatwia pracę nad modułami, brak reakcji na zmiany w kodzie nie musi być leczony ręcznym usuwaniem keszu w bazie ;]</p>
<p>Coming soon: Strony konfiguracyjne oraz zarządzające modulem. Stay tuned ;]</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Drupal module tutorial pt.1]]></title>
<link>http://mstandio.wordpress.com/2009/03/15/module-tutorial-pt1/</link>
<pubDate>Sun, 15 Mar 2009 02:32:08 +0000</pubDate>
<dc:creator>mstandio</dc:creator>
<guid>http://mstandio.wordpress.com/2009/03/15/module-tutorial-pt1/</guid>
<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;Postaram się przedstawić i omówić proces tworzenia modułów do Drupala 6 na p]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>&#160;&#160;&#160;&#160;Postaram się przedstawić i omówić proces tworzenia modułów do Drupala 6 na przykładzie pisanego przeze mnie modułu do rozsyłania ręcznie redagowanego newslettera na podstawie anonimowej subskrybcji emailowej. Moduł nazwę adekwatnie do jego funkcji &#8220;custom newsletter&#8221;.</p>
<p>Moduł będzie się składać z następujących elementów:</p>
<ul>
<li> bloku odpowiedzialnego za wyświetlanie formlularza zapisów email wraz z obsługą ajaxa</li>
<li> strony służącej do zarządzania podanymi adresami email </li>
<li> strony służącej do konfiguracji szablonu wysyłanych wiadomości</li>
<li> strony służacej do redagowania treści wewnątrz szablonu</li>
<li> strony po przekierowaniu na którą, dany adres zostanie wypisany z listy subskrybentów</li>
</ul>
<p>&#160;&#160;&#160;&#160;W dzisiejszym odcinku zajmiemy się utworzeniem modułu, sprawdzeniem kompatybilności z istniejącą konfiguracją oraz utworzeniem tabeli w bazie. Dziką i fascynującą imprezę zaczynamy od utworzenia katalogu [\drupal\sites\all\modules\custom_newsletter], w którym będziemy umieszczać kolejne pliki:</p>
<p>Plik *.info &#8211; definiuje podstawowe informacje i jest wymagany aby dany moduł pokazał się w liście dostępnych modułów. Posiada składnię plików *.ini</p>
<p>&#160;&#160;&#160;&#160;<b>custom_newsletter.info</b></p>
<pre class="brush: php;">
; $Id$
name = custom_neswletter
description = provides custom newsletter for anonymous subscribers
core = 6.x
php = 5.1
</pre>
<p>&#160;&#160;&#160;&#160;Pierwsza linijka odnosi się do SVN i jest wymagana dla zgodności ze sztuką, następnie nazwa, opis wyświetlany przy liście modułów, wymagana wersja drupala oraz php. Mozliwe jest także dodanie zależności wobec innych modułów (dependencies), oraz nazwanie grupy przy której dany moduł będzie wświetlany w panelu administracyjnym (package).</p>
<p>Plik *.module &#8211; zawiera funkcje realizujące funkcjonalność modułu, musi zostać utworzony aby moduł pokazał się na liście dostępnych modułów, w tym przypadku zawiera podstawową funkcję hook_help() definiującą treść pomocy.</p>
<p>&#160;&#160;&#160;&#160;<b>custom_neswletter.module</b></p>
<pre class="brush: php;">
function custom_newsletter_help($path, $arg) {
  if ($path == 'admin/help#customnewsletter') {
    $txt = 'This is string containing help info about custom newsletter module '
      .'none info text included '
      .'module is being developed ;] ';
    $replace = array();
    return '&lt;p&gt;'. t($txt, $replace) .'&lt;/p&gt;';
  }
</pre>
<p>Plik *.install &#8211; plik do ktorego zagląda drupal w poszukiwaniu hook_install() oraz hook_uninstall() podczas włączania i analogicznie wyłączania/deinstalacji modułu. Można za jego pomocą określić, czy są spełnione warunki wymagane przez dany moduł (np. odpowiednie funkcje php) i w razie potrzeby zasygnalizować problem,  a także utworzyć/usunąć tabele w bazie. Niniejszy utworzy określoną tabelę w bazie o ile funkcja mail() zwróci &#8220;true&#8221;, oraz usunie tabelę po odinstalowaniu modułu. Funkcja hook_requirements() w zależności od wartości obsłuugi zmiennej $phase wyświetli komunikat błędu nad listą modułów uniemożliwiając instalację ($phase == &#8216;install&#8217;), lub w Administer-&#62;Reports-&#62;Status Report ($phase == &#8216;runtime&#8217;)</p>
<p>&#160;&#160;&#160;&#160;<b>custom_neswletter.install</b></p>
<pre class="brush: php;">
&lt; ?php
/* $Id: custom_newsletter.install,v 1.0 2009/03/15 05:49:50 dries Exp $ */

function custom_newsletter_requirements($phase) {
  $requirements = array();
  //Check mail() function
  $requirements['mail']['value'] = 'mail function';
  if (mail('example@example.com','','') ) {
    $requirements['mail']['severity'] = REQUIREMENT_OK;
  }else{
    $requirements['mail']['value'] = t('Not working');
    $requirements['mail']['severity'] = REQUIREMENT_ERROR;
    $requirements['mail']['description'] = t('mail() function not supported
                                                          please visit &lt;a href=&quot;@url&quot;&gt;PHP mail documentation for information on
                                                          how to correct this.', array('@url' =&gt; 'www.pl.php.net/manual/pl/ref.mail.php'));
  }
  $requirements['mail']['title'] = t('mail() function');
  return $requirements;
}

function custom_newsletter_install() {
  drupal_install_schema('custom_newsletter');
}

function custom_newsletter_uninstall() {
  drupal_uninstall_schema('custom_newsletter');
}

function custom_newsletter_schema() {
  $schema['custom_newsletter'] = array(
 	'fields' =&gt; array(
 			'id' =&gt; array('type' =&gt; 'serial', 'unsigned' =&gt; TRUE, 'not null' =&gt; TRUE,),
 			'email' =&gt; array('type' =&gt; 'varchar', 'length' =&gt; 127, 'not null' =&gt; TRUE, 'default' =&gt; '',),
 			'hash' =&gt; array('type' =&gt; 'varchar', 'length' =&gt; 30, 'not null' =&gt; TRUE, 'default' =&gt; '',)
     ),
     'primary key' =&gt; array('id'),
  );
  return $schema;
}
?&gt;
</pre>
<p>&#160;&#160;&#160;&#160;Efektem końcowym jest nowy moduł w grupie &#8216;Other&#8217;, który przy próbie włączenia przy nieskonfigurowanym serwerze smtp powinien uniemożliwić instalację obwieszczając błąd przyjaznym różowym komunikatem,  a po przejściu testu zgodności powinien utworzyć w bazie tabelę &#8216;custom_newsletter&#8217;. Aby usunąć tabelę z poziomu Drupala, należy wyłączyć moduł, a następnie gdy pojawi się on na liście modułów w zakładce &#8220;Uninstall&#8221; odinstalować go.<br />
&#160;&#160;&#160;&#160;Jak widać Drupal 6 ma wbudowaną Database Abstraction Layer, więc tabele i ich powiązania opisywane są za pomocą metadanych a nie jak w Drupal 5, kiedy trzeba było określać typ bazy oraz pisać oddzielne kwerendy dla wszystkich przypadków. We wcześniejszych wersjach Drupala istniała tabela &#8217;sequences&#8217; zliczająca ilość różnych elementów, co umożliwiało nadawanie unikalnych wartości kluczom, w wersji 6 korzysta się z własności auto_increment pogarsza to portability, ale podnosi wydajność.<br />
&#160;&#160;&#160;&#160;Po godzinie publikacji widać, że się ostro z tym namordowałem, interfejs administracyjny nawet na localhoście działa dość powolnie, tabela w bazie pokazała mi się dopiero po kilku próbach a raz Drupal się dość poważnie wywalił. Oczywiście po wdrożeniu do użytku większość wyświetlanych treści jest keszowana i całość prezentuje się dość płynnie, jednak zastanawia mnie jak dużo jeszcze złożoności udźwignie Drupal zanim stanie się przekombinowanym bloatem jak wordpress ;]</p>
<p>Przydatne linki:</p>
<ul>
<li><a href="http://api.drupal.org/api/function/drupal_install_schema/6" target="_BLANK">hook_requirements</a> </li>
<li><a href="http://api.drupal.org/api/function/hook_install/6" target="_BLANK">hook_install</a></li>
<li><a href="http://api.drupal.org/api/function/hook_uninstall/6" target="_BLANK">hook_uninstall</a></li>
<li><a href="http://api.drupal.org/api/function/hook_schema/6" target="_BLANK">hook_schema</a></li>
<li><a href="http://drupal.org/node/159605" target="_BLANK">schema data types</a></li>
<li><a href="http://api.drupal.org/api/group/schemaapi/6" target="_BLANK">schema api</a></li>
<li><a href="http://drupal.org/node/146939" target="_BLANK">schema reference</a></li>
</ul>
<p>Comming soon: Blok z formularzem, przy odrobinie szczęścia wraz z obsługą AJAXa ;]</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Kadu instalacja wraz z modułami + zmiana emotikon, dźwięków, ikon statusu.]]></title>
<link>http://desant87.wordpress.com/2009/03/09/kadu-instalacja-zmiana-emotikon-i-dzwiekow/</link>
<pubDate>Mon, 09 Mar 2009 18:36:31 +0000</pubDate>
<dc:creator>desant87</dc:creator>
<guid>http://desant87.wordpress.com/2009/03/09/kadu-instalacja-zmiana-emotikon-i-dzwiekow/</guid>
<description><![CDATA[Gg samo w sobie ma w czasach obecnych coraz to więcej funkcji, ale nikt nie zdaje sobie sprawy z teg]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Gg samo w sobie ma w czasach obecnych coraz to więcej funkcji, ale nikt nie zdaje sobie sprawy z tego że większość tych funkcji była wcześniej wprowadzona w kadu. Aby wyposażyć kadu w dodatkowe opcje np: autoodpowiedź musimy zainstalować dodatkowe moduły. Instalacja kadu wraz z modułami:</p>
<p>sudo apt-get install kadu kadu-external-modules kadu-themes</p>
<p>po instalacji kadu, uruchomieniu go i skonfigurowaniu wciskamy F4 następnie dwuklikiem ładujemy interesujące nas moduły. <a title="kadu" href="http://www.kadu.net/w/Strona_g%C5%82%C3%B3wna" target="_blank">Opisy modułów znajdziemy na oficjalnej stronie kadu</a>.</p>
<p><strong>Dodatkowe informacje wraz z zmianą wygladu okna rozmowy:</strong></p>
<p>konfiguracja -&#62; wygląd -&#62; okno rozmowy -&#62; edytuj</p>
<p>Wklejamy kod:</p>
<p>&#60;p style=&#8221;background-color: #{backgroundColor}&#8221;&#62;#{separator}<br />
&#60;kadu:header&#62;<br />
&#60;table border=&#8221;0&#8243; cellspacing=&#8221;0&#8243; cellpadding=&#8221;0&#8243; width=&#8221;100%&#8221;&#62;<br />
&#60;tr&#62;<br />
&#60;td align=&#8221;left&#8221; width=&#8221;17&#8243; valign=&#8221;center&#8221;&#62;<br />
&#60;img src=&#8221;{${KADU_CONFIG}/avatars/%u.png}{~${KADU_CONFIG}/avatars/%u.png @{Message}}&#8221; width=&#8221;15&#8243; height=&#8221;15&#8243; alt=&#8221;gg: %a&#8221; /&#62;<br />
&#60;/td&#62;<br />
&#60;td align=&#8221;left&#8221; valign=&#8221;center&#8221;&#62;<br />
&#60;b&#62;&#60;font color=&#8221;#{nickColor}&#8221; face=&#8221;Candara&#8221; size=&#8221;4&#8243; style=&#8221;font-style: italic;&#8221;&#62;%a &#60;/font&#62;&#60;/b&#62; &#60;i&#62;%i&#60;/i&#62; %v<br />
&#60;/td&#62;<br />
&#60;td align=&#8221;right&#8221; valign=&#8221;center&#8221;&#62;<br />
&#60;font color=&#8221;#555&#8243;&#62;#{receivedDate}[ / S #{sentDate}]&#60;/font&#62;<br />
&#60;/td&#62;<br />
&#60;/tr&#62;<br />
&#60;/table&#62;<br />
&#60;hr color=&#8221;#ccc&#8221; /&#62;<br />
&#60;/kadu:header&#62;<br />
&#60;font color=&#8221;#{fontColor}&#8221;&#62;#{message}&#60;/font&#62;</p>
<p>zapisujemy daje nam taki efekt:<a href="http://desant87.files.wordpress.com/2009/03/zrzutekranu2.png" target="_blank"> </a><a href="http://desant87.files.wordpress.com/2009/03/zrzutekranu2.png" target="_blank">zobacz</a></p>
<p><strong>Zmiana emotikon kadu na emotikony z gadu:</strong></p>
<p>1. Potrzebujemy emotikon, jeżeli ktoś posiada windowsa zainstalowanego na oddzielnej partycji ma z tym najmiejszy problem jeśli nie to ściągamy je <a href="http://rapidshare.de/files/45964587/download.tar.gz.html">stąd</a>. Wchodzimy do katalogu: program files/gadu/emoticons na dysku na którym jest system windows i kopiujemy folder &#8220;emoticons&#8221;.</p>
<p>2. Następnie klikamy na folder z emotami &#8220;emoticons&#8221; prawym klawiszem myszki, zaznaczamy kopiuj.</p>
<p>3. Odpalamy Terminal i wpisujemy:</p>
<p>sudo nautilus</p>
<p>i wchodzimy do katalogu z emotami, mieści się on w:</p>
<p>/usr/share/kadu/themes/emoticons</p>
<p>4. wklejamy skopiowany folder i zmieniamy skopiowanemu folderowi nazwę na: &#8220;emoticons_gg&#8221;. sprawdzamy prawa odczytu jeśli odczyt ma tylko root zmieniamy go na naszą nazwe użytkownika.</p>
<p>5. Restartujemy Kadu.</p>
<p>6. Następnie prościutko:<br />
Menu -&#62; Konfiguracja -&#62; Wygląd -&#62; Okno rozmowy (zjeżdzamy paskiem na dół!)-&#62; Ścieżki do zestawów ikon [Wybierz]<br />
podajemy lokalizacje:<br />
/usr/share/kadu/themes/emoticons/emoticons_gg</p>
<p>7. dodaj -&#62; ok</p>
<p>8. Teraz wybieramy emoticony w polu zestaw, odszukujemy nazwy &#8220;emoticons_gg&#8221;<br />
zastosuj -&#62; ok, restartujemy kadu dla pewności. Powinno działać.</p>
<p><strong>Zmiana domyślnych dźwięków na własne (nie działa w najnowszych wersjach kadu):</strong></p>
<p>Dźwięki w kadu znajdują się w katalogu:</p>
<p>/usr/share/kadu/themes/sounds</p>
<p>jeśli umieścimy w nim zwykły folder z plikami wav nic nam to nie da, musimy napisać sobie sami plik z konfiguracją. W tym pliku znajdują się następujące dane:</p>
<p>[sounds]<br />
NewMessage=msg.wav<br />
NewChat=msg.wav<br />
StatusChanged/ToOnline=msg.wav<br />
StatusChanged/ToBusy=msg.wav<br />
StatusChanged/ToInvisible=msg.wav<br />
StatusChanged/ToOffline=msg.wav<br />
ConnectionError=msg.wav<br />
FileTransfer/IncomingFile=msg.wav<br />
FileTransfer/Finished=msg.wav</p>
<p>Dźwięki do kadu znajdziemy w <a href="http://www.gadudodatki.pl/" target="_blank">necie</a> ja uzywam <a href="http://rapidshare.de/files/45964587/download.tar.gz.html" target="_blank">takich</a>.<br />
Z dodawaniem dźwięków postępujemy podobnie jak z emotikonami.</p>
<p>Wpisujemy w terminalu:</p>
<p>sudo nautilus</p>
<p>i wklejamy folder z naszymi dźwiękami do:</p>
<p>/usr/share/kadu/themes/sounds</p>
<p>następnie naszemu folderowi z dźwiękami nadajemy prawa do odczytu identycznie jak emotikonom.</p>
<p>Własne dźwięki ustawimy w powiadomienia -&#62; dźwięk -&#62; ścieżki do zestawów i tam wskazujemy: /usr/share/kadu/themes/sounds/nazwatwojegofolderu następnie wybieramy go po restarcie kadu i powinno śmigać <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Zmiana ikon statusu kadu na ikony z gg (nie działa w najnwszych wersjach kadu):</strong></p>
<p>Pobieramy<a href="http://rapidshare.de/files/45989724/wingg.tar.gz.html"> plik z ikonami</a>, rozpakowujemy go klikając prawym przyciskiem myszy. Po czym wycinamy go również klikając na wypakowany folder prawym przyciskiem myszy stosując opcję wytnij. Wpisujemy w konsoli:</p>
<p>sudo nautilus</p>
<p>i wchodzimy do folderu <strong>/usr/share/kadu/themes/icons </strong>wklejamy wycięty folder. Dajemu mu odpowiednie prawa &#8211; klikamy na niego<strong> </strong>prawym przyciskiem myszy właściwości -&#62; uprawnienia dając mu i zawartym plikom w nim odpowiednie prawa jako nasz użytkownik. Jeśli wszystkie prawa zostały dobrze ustawione to powinniśmy je zobaczyć w menu -&#62; konfiguracja -&#62; wygląd -&#62; ogólne tam też  ustawiamy zestaw ikon o nazwie wingg. Dajemy zastosuj -&#62; ok.<strong><br />
</strong></p>
<p>Pamiętaj że robisz to na własną odpowiedzialność.</p>
</div>]]></content:encoded>
</item>

</channel>
</rss>
