tag:blogger.com,1999:blog-71200776195378638122024-03-14T05:41:33.821+01:00Web Majster - triki i rozwiązaniaWeb Majster - triki i rozwiązania. Pokazuję ciekawe rozwiązania w PHP, frameworku Kohana PHP, JavaScript i jQuery, htaccess i mod_rewrite oraz inne.Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.comBlogger29125tag:blogger.com,1999:blog-7120077619537863812.post-12687117366160178612022-02-28T20:49:00.004+01:002022-02-28T21:01:49.420+01:00Regex Laziness Instead of Greediness<div>Przykład użycia "Laziness Instead of Greediness": ".+?"</div><div>https://www.regular-expressions.info/repeat.html</div><div><br /></div><div><span style="font-family: courier;"><?php</span></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;">$h='<ul></span></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;"><li>ps</li></span></div><div><span style="font-family: courier;"><li>ps</li></span></div><div><span style="font-family: courier;"><li class="klasa1 klasa2</span></div><div><span style="font-family: courier;">klasa2</span></div><div><span style="font-family: courier;">" >xyz</li></span></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;"><li>ps</li></span></div><div><span style="font-family: courier;"></ul>';</span></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;">$pattern = '/(.*)(\<li.+?(klasa2).+?\<\/li\>)(.*)/s';</span></div><div><span style="font-family: courier;">$replacement = '${1}<li>tu jest podmiana</li>${4}';</span></div><div><span style="font-family: courier;"> </span></div><div><span style="font-family: courier;"> </span></div><div><span style="font-family: courier;">echo preg_replace($pattern, $replacement, $h); </span></div><div><br /></div><div><br /></div><div>Wynik:</div><div><br /></div><div><div><span style="font-family: courier;"><ul></span></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;"><li>ps</li></span></div><div><span style="font-family: courier;"><li>ps</li></span></div><div><span style="font-family: courier;"><li>tu jest podmiana</li></span></div><div><span style="font-family: courier;"><br /></span></div><div><span style="font-family: courier;"><li>ps</li></span></div><div><span style="font-family: courier;"></ul></span></div></div><div><br /></div>Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com0tag:blogger.com,1999:blog-7120077619537863812.post-66775010820893444652021-08-31T09:59:00.003+02:002021-08-31T10:00:32.938+02:00SOLID Principles in Laravel: 5 Examples<iframe class="BLOG_video_class" allowfullscreen="" youtube-src-id="ZUMQEkoF1_c" width="320" height="266" src="https://www.youtube.com/embed/ZUMQEkoF1_c"></iframe>Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com0tag:blogger.com,1999:blog-7120077619537863812.post-43574684926392329042017-08-12T17:22:00.001+02:002017-08-12T17:24:00.702+02:00Christmas tree without loops in PHP only 109 characters113 chars:<br />
<div style="overflow: auto;">
<pre>$s=10;$r=range(1,$s);array_walk($r,function($v)use($s){echo str_repeat(' ',$s-$v).str_repeat('+',$v*2-1)."\n";});</pre>
</div>
<br />
109 chars:<br />
<div style="overflow: auto;">
<pre>$s=10;$r=range(1,$s);array_walk($r,function($v)use($s){printf('%'.($s+$v-1)."s\n",str_repeat('+',$v*2-1));});</pre>
</div>
<br />
125 chars:<br />
<div style="overflow: auto;">
<pre>$s=10;$r=range(1,$s);array_walk($r,function($v)use($s){echo str_pad(str_repeat('+',$v*2-1),$s+$v-1,' ',STR_PAD_LEFT)."\n";});</pre>
</div>
<br />
<br />
Result:
<div style="overflow: auto;">
<pre>
+
+++
+++++
+++++++
+++++++++
+++++++++++
+++++++++++++
+++++++++++++++
+++++++++++++++++
+++++++++++++++++++
</pre>
</div>Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com0tag:blogger.com,1999:blog-7120077619537863812.post-53416424116422167182017-04-01T08:54:00.001+02:002017-10-29T11:45:34.655+01:00Jak dodać font do Photoshop bez instalacji w WindowsJak dodać font do Photoshop bez instalacji w Windows?<br />
<br />
Wystarczy wrzucić pliki czcionek do folderu<br />
C:\Program Files (x86)\Common Files\Adobe\Fonts\<br>
dla wersji 32-bit<br>
lub<br>
C:\Program Files\Common Files\Adobe\Fonts\<br>
dla wersji 64-bit.<br>
<br>
Jeśli katalog Fonts nie istnieje, to należy go utworzyć.
Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com0tag:blogger.com,1999:blog-7120077619537863812.post-91108707804977747982016-01-06T15:30:00.001+01:002016-01-06T15:30:39.177+01:00Jak stworzyć archiwum Zip w PHPPrzykład rekursywnego tworzenia archiwum Zip:
<br />
<br />
<table style="width: 100%;">
<tbody>
<tr>
<td style="background-color: #fbd4b4; border: 1px solid #888; padding: 5px 10px;"><pre><?php
$directory = 'files';
$path = __DIR__ . '/' . $directory;
$filename = sprintf('%s.zip', $path);
$zip = new ZipArchive;
$zip->open($filename, ZipArchive::CREATE);
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path),
RecursiveIteratorIterator::LEAVES_ONLY
);
foreach ($files as $name => $file) {
if (! $file->isDir()) {
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($path) + 1);
$zip->addFile($filePath, $relativePath);
}
}
$zip->close();
</pre>
<pre></pre>
</td>
</tr>
</tbody></table>
Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com0tag:blogger.com,1999:blog-7120077619537863812.post-80900250835967882322014-12-31T14:56:00.000+01:002014-12-31T15:03:12.197+01:00Pobranie poprzedniego i następnego rekordu dowolnego zapytania w MySQLPoniższe funkcje są przykładem, jak pobrać sąsiadujące wiersze w dowolnym zapytaniu z uwzględnieniem sortowania:<br />
<br />
<table>
<tbody>
<tr>
<td style="background-color: #fbd4b4; border: 1px solid #888;"><pre>public function getPrevItem($id, $onlyActive = true, $categoryId = null) {
$where = ' WHERE 1 = 1 ';
$sqlParams = array();
if ($onlyActive) {
$where .= ' AND a.`active` = 1 AND c.`active` = 1 ';
}
if ($categoryId !== null) {
$where .= ' AND a.id_category = ? ';
$sqlParams[] = $categoryId;
}
$this->getSql()->query("SET @item_offset = -1");
$sql = "SELECT * FROM (
SELECT @item_offset := @item_offset + 1 AS `item_offset`, id
FROM (
SELECT a.id
FROM `articles` a
JOIN `articles_category` c ON c.id = a.id_category
$where
ORDER BY a.`pos` DESC, a.`id` DESC
) AS x
) AS t WHERE t.id = ?";
$itemOffset = (int) $this->getSql()->value($sql, array_merge($sqlParams, array($id)));
if ($itemOffset == 0) {
return false;
}
$prevOffset = $itemOffset - 1;
$sql = "SELECT a.*, c.name AS category_name, c.slug AS category_slug
FROM `articles` a
JOIN `articles_category` c ON c.id = a.id_category
$where
ORDER BY a.`pos` DESC, a.`id` DESC
LIMIT 1
OFFSET $prevOffset";
$prev = $this->getSql()->one($sql);
return $prev;
}
public function getNextItem($id, $onlyActive = true, $categoryId = null) {
$where = ' WHERE 1 = 1 ';
$sqlParams = array();
if ($onlyActive) {
$where .= ' AND a.`active` = 1 AND c.`active` = 1 ';
}
if ($categoryId !== null) {
$where .= ' AND a.id_category = ? ';
$sqlParams[] = $categoryId;
}
$this->getSql()->query("SET @item_offset = -1");
$sql = "SELECT * FROM (
SELECT @item_offset := @item_offset + 1 AS `item_offset`, id
FROM (
SELECT a.id
FROM `articles` a
JOIN `articles_category` c ON c.id = a.id_category
$where
ORDER BY a.`pos` DESC, a.`id` DESC
) AS x
) AS t WHERE t.id = ?";
$itemOffset = (int) $this->getSql()->value($sql, array_merge($sqlParams, array($id)));
$nextOffset = $itemOffset + 1;
$sql = "SELECT a.*, c.name AS category_name, c.slug AS category_slug
FROM `articles` a
JOIN `articles_category` c ON c.id = a.id_category
$where
ORDER BY a.`pos` DESC, a.`id` DESC
LIMIT 1
OFFSET $nextOffset";
$next = $this->getSql()->one($sql);
return $next;
}
</pre>
</td>
</tr>
</tbody></table>
<br />
Legenda:<br />
<span style="font-family: Courier New, Courier, monospace;">$this->getSql()->query()</span> - wykonuje zapytanie<br />
<span style="font-family: Courier New, Courier, monospace;">$this->getSql()->value()</span> - zwraca wartość pierwszej kolumny w pierwszym rekordzie wyniku zapytania<br />
<span style="font-family: Courier New, Courier, monospace;">$this->getSql()->one()</span> - zwraca jeden rekord zapytania<br />
<br />Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com0tag:blogger.com,1999:blog-7120077619537863812.post-67134442866439637632013-08-13T12:32:00.001+02:002013-08-15T10:58:50.702+02:00Ignorowanie polskich znaków w MySQLJeśli chcemy znaleźć słowo 'żółw', można wpisać tylko 'zolw' (opcja dla leniwych lub niewyedukowanych).<br />
Rozwiązanie jest takie:<br />
<br />
<table style="background-color: #fbd4b4; border: 1px solid #444; font-family: 'Courier New', Courier, monospace; min-width: 90%;">
<tbody>
<tr>
<td><pre><pre><code><span class="sql1-reservedword">SELECT</span><span class="sql1-space"> </span><span class="sql1-symbol">*</span><span class="sql1-space">
</span><span class="sql1-reservedword">FROM</span><span class="sql1-space"> </span><span class="sql1-delimitedidentifier">`animals`</span><span class="sql1-space">
</span><span class="sql1-reservedword">WHERE</span><span class="sql1-space"> </span><span class="sql1-delimitedidentifier">`name`</span><span class="sql1-space"> </span><span class="sql1-reservedword">COLLATE</span><span class="sql1-space"> </span><span class="sql1-datatype">utf8_general_ci</span><span class="sql1-space"> </span><span class="sql1-reservedword">LIKE</span><span class="sql1-space"> </span><span class="sql1-string">'%zolw%'</span><span class="sql1-symbol">;
<pre><code><span class="sql1-reservedword">SELECT</span><span class="sql1-space"> </span><span class="sql1-symbol">*</span><span class="sql1-space">
</span><span class="sql1-reservedword">FROM</span><span class="sql1-space"> </span><span class="sql1-delimitedidentifier">`animals`</span><span class="sql1-space">
</span><span class="sql1-reservedword">WHERE</span><span class="sql1-space"> </span><span class="sql1-delimitedidentifier">`name`</span><span class="sql1-space"> </span><span class="sql1-reservedword">COLLATE</span><span class="sql1-space"> </span><span class="sql1-datatype">utf8_general_ci</span><span class="sql1-space"> </span><span class="sql1-reservedword">LIKE</span><span class="sql1-space"> </span><span class="sql1-string">'%żółw%'</span><span class="sql1-symbol">;</span></code></pre>
</span></code></pre>
</pre>
</td>
</tr>
</tbody></table>
<br />
Oba zapytania są równoważne.Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com0tag:blogger.com,1999:blog-7120077619537863812.post-48975140112583157032013-02-14T09:33:00.000+01:002013-02-14T10:19:34.161+01:00Zaślepka dla nie załadowanych obrazków w jQueryWitam,<br />
pokażę jeden ze sposobów na wstawienie zaślepki obrazków, które nie zostały wczytane:<br />
<br />
<table style="background-color: #fbd4b4; border: 1px solid #444; font-family: 'Courier New', Courier, monospace; min-width: 90%;">
<tbody>
<tr>
<td><pre>$(window).load(function() {
var w, h, w1, h1;
$('img').each(function() {
if (!this.complete
|| typeof this.naturalWidth == "undefined"
|| this.naturalWidth == 0) {
w = 100;
h = 100;
w1 = parseInt($(this).attr('width'), 10);
h1 = parseInt($(this).attr('height'), 10);
if (w1 && h1) {
w = w1;
h = h1;
}
this.src = 'http://placehold.it/'+w+'/'+h;
}
});
});
</pre>
</td>
</tr>
</tbody></table>
<br />
Ten sposób działa w normalnych przeglądarkach.Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com0tag:blogger.com,1999:blog-7120077619537863812.post-61794524218836585132012-09-16T19:42:00.001+02:002012-09-16T19:47:08.292+02:00Generowanie struktury drzewiastej do testów<strong>Jak wygenerować tablicę, która będzie reprezentować strukturę drzewiastą?</strong>
<br />
<br />
Pomocna będzie funkcja do generowania losowych wartości tekstowych:<br />
<table style="background-color: #fbd4b4; border: 1px solid #444; font-family: 'Courier New', Courier, monospace; min-width: 90%;">
<tbody>
<tr>
<td><pre>function randomText(){
$ch = range('a', 'z');
$count = count($ch);
$length = rand(5, 10);
$text = '';
for($i=0; $i < $length; $i++){
$text .= $ch{rand(0, $count-1)};
}
return $text;
}
</pre>
</td>
</tr>
</tbody></table>
<br />
Utwórzmy klasę Tree, która będzie miała trzy prywatne właściwości określające wygenerowane drzewo, liczbę poziomów drzewa oraz liczbę gałęzi na każdym poziomie.<br />
Do metody Tree::makeTree() przekazujemy wartości, które określą nam wielkość drzewa.<br />
W końcu generujemy rekurencyjnie drzewo w prywatnej metodzie Tree::_makeTree(). Wartości przekazywane do tej metody to aktualny poziom, numer gałęzi na poziomie oraz numer węzła w drzewie, tzn. klucz w tablicy rodzica.<br />
<table style="background-color: #fbd4b4; border: 1px solid #444; font-family: 'Courier New', Courier, monospace; min-width: 90%;">
<tbody>
<tr>
<td><pre>class Tree{
private $tree; // wygenerowane drzewo
private $levels; // liczba poziomów drzewa
private $branches; // liczba gałęzi na każdym poziomie
public function makeTree($levels, $branches){
$this->tree = array();
$this->levels = $levels;
$this->branches = $branches;
$this->_makeTree();
}
private function _makeTree($level = 0, $branch = 0, $id = null){
if ($level > $this->levels) {
return;
}
$this->tree[] = array('value' => randomText(), 'parent' => $id);
end($this->tree);
$id = key($this->tree);
for($i=0; $i < $this->branches; $i++) {
$this->_makeTree($level+1, $i, $id);
}
}
public function getTree(){
return $this->tree;
}
}
</pre>
</td>
</tr>
</tbody></table>
<br />
Aby wartości w drzewie miały za każdym razem takie same wartości, można ustawić generator liczb losowych.<br />
<table style="background-color: #fbd4b4; border: 1px solid #444; font-family: 'Courier New', Courier, monospace; min-width: 90%;">
<tbody>
<tr>
<td><pre>srand(0);
$t = new Tree();
$t->makeTree(3,2);
var_dump($t->getTree());
</pre>
</td>
</tr>
</tbody></table>
<br />
Te ustawienia wygenerują tablicę o tej strukturze:<br />
<table style="background-color: #fbd4b4; border: 1px solid #444; font-family: 'Courier New', Courier, monospace; min-width: 90%;">
<tbody>
<tr>
<td><pre><pre class="xdebug-var-dump" dir="ltr"><b>array</b>
0 <span style="color: #888a85;">=></span>
<b>array</b>
'value' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'eifefuq'</span> <i>(length=7)</i>
'parent' <span style="color: #888a85;">=></span> <span style="color: #3465a4;">null</span>
1 <span style="color: #888a85;">=></span>
<b>array</b>
'value' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'yknjklv'</span> <i>(length=7)</i>
'parent' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">0</span>
2 <span style="color: #888a85;">=></span>
<b>array</b>
'value' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'fovima'</span> <i>(length=6)</i>
'parent' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">1</span>
3 <span style="color: #888a85;">=></span>
<b>array</b>
'value' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'rtnuteg'</span> <i>(length=7)</i>
'parent' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">2</span>
4 <span style="color: #888a85;">=></span>
<b>array</b>
'value' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'miagkiylls'</span> <i>(length=10)</i>
'parent' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">2</span>
5 <span style="color: #888a85;">=></span>
<b>array</b>
'value' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'xbpvmgosn'</span> <i>(length=9)</i>
'parent' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">1</span>
6 <span style="color: #888a85;">=></span>
<b>array</b>
'value' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'tqwrsjw'</span> <i>(length=7)</i>
'parent' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">5</span>
7 <span style="color: #888a85;">=></span>
<b>array</b>
'value' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'ocjmxpr'</span> <i>(length=7)</i>
'parent' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">5</span>
8 <span style="color: #888a85;">=></span>
<b>array</b>
'value' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'uarkvdrq'</span> <i>(length=8)</i>
'parent' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">0</span>
9 <span style="color: #888a85;">=></span>
<b>array</b>
'value' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'coehs'</span> <i>(length=5)</i>
'parent' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">8</span>
10 <span style="color: #888a85;">=></span>
<b>array</b>
'value' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'nkdupaci'</span> <i>(length=8)</i>
'parent' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">9</span>
11 <span style="color: #888a85;">=></span>
<b>array</b>
'value' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'hvcjublmpy'</span> <i>(length=10)</i>
'parent' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">9</span>
12 <span style="color: #888a85;">=></span>
<b>array</b>
'value' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'gihucb'</span> <i>(length=6)</i>
'parent' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">8</span>
13 <span style="color: #888a85;">=></span>
<b>array</b>
'value' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'zzkpck'</span> <i>(length=6)</i>
'parent' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">12</span>
14 <span style="color: #888a85;">=></span>
<b>array</b>
'value' <span style="color: #888a85;">=></span> <small>string</small> <span style="color: #cc0000;">'nbjtsdg'</span> <i>(length=7)</i>
'parent' <span style="color: #888a85;">=></span> <small>int</small> <span style="color: #4e9a06;">12</span></pre>
</pre>
</td>
</tr>
</tbody></table>
Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com0tag:blogger.com,1999:blog-7120077619537863812.post-18275798314338836412012-02-21T21:35:00.003+01:002012-02-22T08:19:49.010+01:00Miniaturki automatycznie zapisane na serwerzeMasz zdjęcia normalnych rozmiarów, jednak nie chcesz przerabiać wszystkich na miniatury.<br />
Można za pomocą CSS lub atrybutów <span style="font-family: 'Courier New', Courier, monospace;">width</span> i <span style="font-family: 'Courier New', Courier, monospace;">height</span> zmniejszyć ich wymiary na ekranie, ale ich rozmiar będzie nadal tak duży, jak dużego zdjęcia, co powoduję że się dłużej ładują.<br />
<br />
Pokażę trick wykorzystujący JavaScript/JQuery, .htaccess/mod_rewrite i oczywiście PHP, który będzie tworzył miniatury w locie i zapisywał je na serwerze, gdy tylko zdjęcie zostanie wyświetlone za pierwszym razem.<br />
<br />
<a name='more'></a><br />
<br />
Niech zdjęcia znajdują się w głównym katalogu <span style="font-family: 'Courier New', Courier, monospace;">/img</span>, a miniatury w katalogu <span style="font-family: 'Courier New', Courier, monospace;">/thumbs</span>.<br />
<br />
Mamy kod HTML:<br />
<table style="width: 100%;"><tbody>
<tr><td style="background-color: #fbd4b4; border-bottom-color: rgb(136, 136, 136); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(136, 136, 136); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(136, 136, 136); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(136, 136, 136); border-top-style: solid; border-top-width: 1px;"><span style="font-family: 'Courier New', Courier, monospace;"><img src="/img/zdjecie-01.jpg" alt="Zdjęcie" class="thumb" /> </span></td></tr>
</tbody></table><br />
<br />
Przy pomocy JavaScript/JQuery zamienimy ścieżkę obrazka na taką, aby był pobrany z katalogu <span style="font-family: 'Courier New', Courier, monospace;">/thumbs</span>:<br />
<br />
<table style="width: 100%;"><tbody>
<tr><td style="background-color: #fbd4b4; border-bottom-color: rgb(136, 136, 136); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(136, 136, 136); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(136, 136, 136); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(136, 136, 136); border-top-style: solid; border-top-width: 1px;"><span style="font-family: 'Courier New', Courier, monospace;">$('.thumb').each(function(){</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> var src = $(this).attr('src'); // pobranie ścieżki zdjęcia</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> src.replace('/img/', '/thumbs/');</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> $(this).attr('src', src); // podmiana części ścieżki na nową</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">});</span></td></tr>
</tbody></table><br />
<br />
Po tym zabiegu kod HTML będzie wyglądał następująco:<br />
<br />
<table style="width: 100%;"><tbody>
<tr><td style="background-color: #fbd4b4; border-bottom-color: rgb(136, 136, 136); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(136, 136, 136); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(136, 136, 136); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(136, 136, 136); border-top-style: solid; border-top-width: 1px;"><span style="font-family: 'Courier New', Courier, monospace;"><img src="/thumbs/zdjecie-01.jpg" alt="Zdjęcie" class="thumb" /></span></td></tr>
</tbody></table><br />
<br />
tylko, że zdjęcie się nie załaduje, bo nie istnieje w katalogu <span style="font-family: 'Courier New', Courier, monospace;">/thumbs</span>.<br />
Zatem trzeba je tam utworzyć.<br />
<br />
Do tego będzie potrzebny plik <span style="font-family: 'Courier New', Courier, monospace;">.htaccess</span>:<br />
<br />
<br />
<table style="width: 659px;"><tbody>
<tr><td style="background-color: #fbd4b4; border-bottom-color: rgb(136, 136, 136); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(136, 136, 136); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(136, 136, 136); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(136, 136, 136); border-top-style: solid; border-top-width: 1px;"><span style="font-family: 'Courier New', Courier, monospace;">RewriteEngine On</span><br />
<br />
<span style="font-family: 'Courier New', Courier, monospace;"># sprawdzamy, czy żądany adres dotyczy katalogu /thumbs</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"># i jego zawartości</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">RewriteCond %{REQUEST_URI} ^/thumbs/(.*)$</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br />
</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"># sprawdzamy, czy plik nie istnieje</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">RewriteCond %{REQUEST_FILENAME} !-f</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br />
</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"># jeśli spełnione są powyższe warunki,</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"># to przekazujemy obsługę do pliku resize.php</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"># ze zmienną %1, która dotyczy zawartości nawiasu w pierwszym warunku</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">RewriteRule .* /resize.php?img=%1 [L]</span></td></tr>
</tbody></table><br />
<br />
Jeśli istnieje już odpowiedni plik w katalogu <span style="font-family: 'Courier New', Courier, monospace;">/thumbs</span>, to reguła w <span style="font-family: 'Courier New', Courier, monospace;">.htaccess</span> nie zostanie wykonana.<br />
Po prostu zostanie wyświetlony w tym wypadku plik <span style="font-family: 'Courier New', Courier, monospace;">/thumbs/zdjecie-01.jpg</span>.<br />
<br />
Ostatnią rzeczą jest utworzenie miniatury zdjęcia i zapisanie jej do katalogu <span style="font-family: 'Courier New', Courier, monospace;">/thumbs</span> pod taką samą nazwą.<br />
Zostanie to wykonane w skrypcie <span style="font-family: 'Courier New', Courier, monospace;">resize.php</span>.<br />
Dla uproszczenia zakładam, że zdjęcie jest w formacie <span style="font-family: 'Courier New', Courier, monospace;">.jpg</span>.<br />
<br />
<br />
<table style="width: 659px;"><tbody>
<tr><td style="background-color: #fbd4b4; border-bottom-color: rgb(136, 136, 136); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(136, 136, 136); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(136, 136, 136); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(136, 136, 136); border-top-style: solid; border-top-width: 1px;"><span style="font-family: 'Courier New', Courier, monospace;"><?php</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">// .htaccess przekazał nazwę zdjęcia w zmiennej $_GET['img']</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">if(!empty($_GET['img'])){</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br />
</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><span style="white-space: pre;"> </span>// utworzenie zdęcia z podanej ścieżki</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>$img = imagecreatefromjpeg('/img/'.$_GET['img']);</span><br />
<br />
<span style="font-family: 'Courier New', Courier, monospace;"> // wymiary zdjęcia</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>$img_w = imagesx($img);</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>$img_h = imagesy($img);</span><br />
<span class="Apple-tab-span" style="font-family: 'Courier New', Courier, monospace; white-space: pre;"> </span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> // wymiary miniatury, tutaj szerokość jest stała na 200px, a wysokość obliczana</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>$thumb_w = 200;</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>$thumb_h = (int)($img_h * $thumb_w / $img_w);</span><br />
<span class="Apple-tab-span" style="font-family: 'Courier New', Courier, monospace; white-space: pre;"> </span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> // utworzenie miniaury o odpowiednich wymiarach</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>$thumb = imagecreatetruecolor($thumb_w, $thumb_h);</span><br />
<span class="Apple-tab-span" style="font-family: 'Courier New', Courier, monospace; white-space: pre;"> </span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> // miniaturyzacja oryginalnego zdjęcia</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>imagecopyresampled($thumb, $img, 0, 0, 0, 0, $thumb_w, $thumb_h, $img_w, $img_h);</span><br />
<span class="Apple-tab-span" style="font-family: 'Courier New', Courier, monospace; white-space: pre;"> </span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> /</span>/zapisanie do pliku w katalogu /thumbs</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>imagejpeg($thumb, '/thumbs/'.$_GET['img']);</span><br />
<span class="Apple-tab-span" style="font-family: 'Courier New', Courier, monospace; white-space: pre;"> </span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>// pokazanie w przeglądarce</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>header('Content-type: image/jpeg');</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span>imagejpeg($thumb);</span><br />
<span style="font-family: 'Courier New', Courier, monospace;">}</span></td></tr>
</tbody></table><br />
<br />
<br />
<br />
Po tej całej operacji miniatura będzie pobierana z katalogu <span style="font-family: 'Courier New', Courier, monospace;">/thumbs</span> jeśli istnieje, a jeśli nie, to najpierw utworzona.Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com0tag:blogger.com,1999:blog-7120077619537863812.post-5256804059917373922012-02-09T20:20:00.002+01:002012-02-22T08:20:22.190+01:00Jak dodać unikalny ciąg znaków do rekordu w bazie danychPokażę sposób na wstawienie unikalnego ciągu znaków do tabeli w bazie danych.<br />
<br />
Załóżmy, że mamy taką tabelę:<br />
<table style="width: 100%;"><tbody>
<tr><td style="background-color: #fbd4b4; border: 1px solid #444; font-family: 'Courier New', Courier, monospace;">user<br />
---------------------<br />
id INT PRIMARY KEY AUTO_INCREMENT<br />
hash VARCHAR DEFAULT NULL<br />
data TEXT </td></tr>
</tbody></table>gdzie <span style="font-family: 'Courier New', Courier, monospace;">id</span> jest kluczem głównym, zatem indeksem unikalnym,<br />
<span style="font-family: 'Courier New', Courier, monospace;">hash</span> ma być unikalnym ciągiem znaków - na początku niech posiada wartość <span style="font-family: 'Courier New', Courier, monospace;">NULL</span>,<br />
oraz <span style="font-family: 'Courier New', Courier, monospace;">data</span> - jakieś dane. <br />
<br />
<a name='more'></a><br />
<br />
<br />
<table style="width: 100%;"><tbody>
<tr><td style="background-color: #fbd4b4; border: 1px solid #444; font-family: 'Courier New', Courier, monospace;">// tworzymy hash o stałej ilości znaków, np. md5 ma 32 znaki<br />
// może się zdarzyć, że taki hash może nie być unikalny w bazie <br />
$hash = md5(time());<br />
<br />
// insert do bazy danych i zwrócenie id rekordu<br />
$insert_id = $db->insert('user', array('data' => 'jakieś dane'));<br />
<br />
// dodajemy do wygenerowanego 32-znakowego ciągu id wprowadzonego rekordu<br />
// hash będzie unikalny, ponieważ $insert_id jest unikalne<br />
$hash = $hash . $insert_id;<br />
<br />
// teraz należy uaktualnić hash<br />
$db->update('user')->set(array('hash' => $hash))->where(array('id' => $insert_id));</td></tr>
</tbody></table><br />
<br />
Takie rozwiązanie pozwala na szybie i łatwe otrzymanie unikalnego stringu.<br />
<table style="width: 100%;"><tbody>
<tr></tr>
</tbody></table>Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com0tag:blogger.com,1999:blog-7120077619537863812.post-62239576277193109612012-01-24T12:15:00.000+01:002012-01-24T12:15:39.164+01:00Zmiana kolejności kluczy w tablicy 2-wymiarowejPrzy uploadzie tablicy plików otrzymujemy taką tablicę 2-wymiarową:<br />
<br />
<table style="width: 676px;"><tbody>
<tr><td style="background-color: #fbd4b4; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(0, 0, 0); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(0, 0, 0); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(0, 0, 0); border-top-style: solid; border-top-width: 1px; font-family: 'Courier New', Courier, monospace;">$_FILES['name'][0]<br />
$_FILES['name'][1] <br />
...<br />
$_FILES['type'][0] <br />
$_FILES['type'][1] <br />
...<br />
$_FILES['error'][0] <br />
$_FILES['error'][1] <br />
...<br />
$_FILES['tmp_name'][0]<br />
$_FILES['tmp_name'][1]<br />
... <br />
<br />
$_FILES['size'][0]<br />
$_FILES['size'][1]<br />
...<br />
<br />
</td></tr>
</tbody></table><br class="Apple-interchange-newline" /><br />
Wygodniej ją przetwarzać, jeśli klucze byłyby zamienione miejscami, tzn. [0]['name'], itd.<br />
Oto funkcja, która zamienia te klucze miejscami w tablicy 2-wymiarowej:<br />
<table style="width: 676px;"><tbody>
<tr><td style="background-color: #fbd4b4; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(0, 0, 0); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(0, 0, 0); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(0, 0, 0); border-top-style: solid; border-top-width: 1px;"><div style="font-family: 'Courier New', Courier, monospace;">function replaceKeys(array $arr){</div><div style="font-family: 'Courier New', Courier, monospace;"> $newArr = array();</div><span style="font-family: 'Courier New', Courier, monospace;"> foreach($f as $k1 => $v1){</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> </span><span style="font-family: 'Courier New', Courier, monospace;">foreach($v1 as $k2 => $v2){</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> </span> <span style="font-family: 'Courier New', Courier, monospace;">$newArr</span> <span style="font-family: 'Courier New', Courier, monospace;">[$k2][$k1] = $f[$k1][$k2];</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> </span><span style="font-family: 'Courier New', Courier, monospace;">}</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> }</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"> return </span><span style="font-family: 'Courier New', Courier, monospace;">$newArr;</span><br />
<div style="font-family: 'Courier New', Courier, monospace;">}</div></td></tr>
</tbody></table><br />
Teraz jest wygodniej sprawdzać uploadowane pliki:<br />
<br />
<table style="width: 676px;"><tbody>
<tr><td style="background-color: #fbd4b4; border-bottom-color: rgb(0, 0, 0); border-bottom-style: solid; border-bottom-width: 1px; border-image: initial; border-left-color: rgb(0, 0, 0); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(0, 0, 0); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(0, 0, 0); border-top-style: solid; border-top-width: 1px;"><div style="font-family: 'Courier New', Courier, monospace;">$files = replaceKeys($_FILES);</div><div style="font-family: 'Courier New', Courier, monospace;">foreach($files as $file){</div><div style="font-family: 'Courier New', Courier, monospace;"> if($file['error'] == 0){</div><div style="font-family: 'Courier New', Courier, monospace;"> // ......</div><div style="font-family: 'Courier New', Courier, monospace;"> }</div><div style="font-family: 'Courier New', Courier, monospace;">}</div></td></tr>
</tbody></table>Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com0tag:blogger.com,1999:blog-7120077619537863812.post-70620940731481995852011-12-14T11:37:00.000+01:002011-12-14T11:37:43.407+01:00Tablica znaków w PHP bez używania pętliCześć,<br />
pokażę, jak stworzyć tablicę znaków w PHP nie używając pętli, czyli<br />
<span style="font-family: 'Courier New', Courier, monospace;">array('A', 'B', ..., 'Z', 'a', 'b', ..., 'z')</span>.<br />
<br />
<table style="width: 100%;"><tbody>
<tr><td style="background-color: #fbd4b4; border: 1px solid #000; font-family: 'Courier New', Courier, monospace;">// utworzenie tablicy liczb array(65, ..., 90)<br />
$big = range(65, 90);<br />
// utworzenie tablicy liczb array(97, ..., 122) <br />
$small = range(97, 122);<br />
// złączenie tych tablic <br />
$nums = array_merge($big, $small);<br />
// stosujemy funkcję chr() do każdego elementu tablicy<br />
$letters = array_map('chr', $nums);<br />
var_dump($letters);</td></tr>
</tbody></table><br />
Liczby w tablicach <span style="font-family: 'Courier New', Courier, monospace;">$big</span> i <span style="font-family: 'Courier New', Courier, monospace;">$small</span> to kody <span style="font-family: Georgia, 'Times New Roman', serif;">ASCII</span> liter.<br />
<br />
Jeżeli chcemy otrzymać string <span style="font-family: 'Courier New', Courier, monospace;">'ABC...Zabc....z'</span>,<br />
to wystarczy złączyć elementy tablicy:<br />
<span style="font-family: 'Courier New', Courier, monospace;">implode('', $letters);</span>Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com0tag:blogger.com,1999:blog-7120077619537863812.post-45229832921493978392011-12-08T15:43:00.001+01:002011-12-08T15:46:49.994+01:00Tworzenie pliku .htaccess (z kropką) w WindowsCześć,<br />
jak zwykle w Windows trzeba zrobić coś na około.<br />
Pokażę, jak utworzyć plik zaczynający się od kropki na przykładzie <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">.htaccess</span>.<br />
<br />
1. Najpierw tworzymy sobie np. <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">htaccess.txt</span><br />
2. Wchodzimy do wiersza polecenia (<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">cmd</span> lub wybieramy z akcesorii)<br />
3. Przechodzimy do poleceniem <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">cd</span> do katalogu z plikiem <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">htaccess.txt</span><br />
4. Poleceniem <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">ren htaccess.txt .htaccess</span> zmieniamy nazwę.<br />
<br />
Gotowe!<br />
<br />
Jak ktoś ma Notepad++, to jest to dużo prostsze.<br />
Wystarczy otworzyć plik <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">htaccess.txt</span> i z menu File wybrać Raname i wpisać nową nazwę z kropką na początku.Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com4tag:blogger.com,1999:blog-7120077619537863812.post-63905161149983177752011-12-06T14:49:00.002+01:002012-02-22T08:21:10.856+01:00Rotator zdjęć w jQuery z jedną zmienną globalnąCześć,<br />
często piszemy skrypty JavaScript stosując wiele zmiennych globalnych. Nieraz może to spowodować, że w dwóch miejscach na raz będziemy mieć zmienną o takiej samej nazwie.<br />
Pokażę na przykładzie rotatora zdjęć z wykorzystaniem funkcji <span style="font-family: 'Courier New', Courier, monospace;">setTimeout</span>, jak wykorzystać tylko jedną zmienną globalną.<br />
<br />
<a name='more'></a><br />
<br />
<br />
Na początek HTML. Potrzebna będzie nam lista ze zdjęciami:<br />
<table style="width: 100%;"><tbody>
<tr><td style="background-color: #fbd4b4; border: 1px solid #000; font-family: 'Courier New',Courier,monospace;"><br />
<ul id="rotator"><br />
<li><img src="img/zdjecie-1.jpg" alt="" /></li><br />
<li><img src="img/zdjecie-2.jpg" alt="" /></li><br />
<li><img src="img/zdjecie-3.jpg" alt="" /></li><br />
<li><img src="img/zdjecie-4.jpg" alt="" /></li><br />
</ul></td></tr>
</tbody></table><br />
Nadajmy style CSS tej liście i jej elementom:<br />
<table style="width: 100%;"><tbody>
<tr><td style="background-color: #fbd4b4; border: 1px solid #000; font-family: 'Courier New',Courier,monospace;">ul#rotator{<br />
/* usuwamy odstępy */ <br />
padding: 0;<br />
margin: 0;<br />
/* usuwamy markery */ <br />
list-style-type: none;<br />
/* ustawiamy pozycję na relative, aby pozycjonować elementy listy */ <br />
position: relative;<br />
/* ustawiamy szerokość i wysokość, aby treść za listą była widoczna */ <br />
width: 300px;<br />
height: 200px; <br />
}<br />
ul#rotator li{<br />
padding: 0;<br />
margin: 0;<br />
/* ustawiamy pozycję na bezwzględną do punktu (0, 0) */ <br />
position: absolute;<br />
top: 0;<br />
left: 0;<br />
/* ukrywamy elementy listy z wyjątkiem pierwszego */ <br />
display: none;<br />
}<br />
ul#rotator li:first-child{<br />
display: list-item;<br />
}<br />
ul#rotator li img{<br />
/* usuwa zbędne odstępy obrazków */<br />
display: block;<br />
/* niech zdjęcia się dostosują do rozmiarów listy */ <br />
width: 100%;<br />
height: 100%;<br />
}</td></tr>
</tbody></table><br />
Teraz część najważniejsza - obsługa rotatora. Oczywiście dołączmy <span style="font-family: 'Courier New', Courier, monospace;">jQuery</span>.<br />
<table style="width: 100%;"><tbody>
<tr><td style="background-color: #fbd4b4; border: 1px solid #000; font-family: 'Courier New',Courier,monospace;"><br />
$(document).ready(function(){<br />
var ROTATOR = {<br />
_this: "",<br />
timeout: 0,<br />
img_count: 0, // ilość elementów do rotacji<br />
idx: 0, // aktualny index<br />
ul_id: "", // id listy<br />
speed: 2000, // szybkość zmiany w ms<br />
fade_speed: 500, // szybkość przenikania w milisekunach<br />
<br />
// funkcja inicjująca początkowe wartości<br />
start: function(ul_id, speed, fade_speed){<br />
<br />
// w różnych miejscach this jest czymś innym,<br />
// dlatego niech od tej pory <br />
// zmienna _this będzie aktualnym this <br />
_this = this;<br />
<br />
// sprawdzenie parametrów opcjonalnych<br />
if(speed != null){<br />
_this.speed = speed;<br />
}<br />
if(fade_speed != null){<br />
_this.fade_speed = fade_speed;<br />
}<br />
<br />
// id listy, na której będzie się rotacja<br />
_this.ul_id = ul_id;<br />
<br />
// obliczenie ilości elementów listy<br />
_this.img_count = $('ul'+_this.ul_id+' li').length;<br />
<br />
// zaczynamy rotację<br />
_this.timeout = setTimeout(_this.change, _this.speed);<br />
},<br />
<br />
// funkcja, która zmienia zdjęcia<br />
change: function(){<br />
if(_this.idx >= _this.img_count || _this.idx < 0){<br />
_this.idx = 0;<br />
}<br />
<br />
// wybieramy n-ty (idx-ty) element listy<br />
var li = $('ul'+_this.ul_id+' li:nth('+_this.idx+')');<br />
<br />
// niech rodzeństwo wybranego elementu zanika<br />
li.siblings().fadeOut(_this.fade_speed);<br />
<br />
// a wybrany element niech się pojawia<br />
li.fadeIn(_this.fade_speed, function(){<br />
// jak się już do końca pojawi,<br />
// to zwiększ index elementu listy i ponownie wywołaj funkcję<br />
_this.idx = 1 + _this.idx;<br />
_this.timeout = setTimeout(_this.change, _this.speed);<br />
});<br />
}<br />
};<br />
<br />
// rotator zdjęć wywołujemy następująco<br />
ROTATOR.start('#rotator');<br />
// lub z dodatkowymi parametrami, np.:<br />
// ROTATOR.start('#rotator', 3000, 250);<br />
<br />
});</td></tr>
</tbody></table><br />
Jak widać mamy tylko jedną zmienną globalną w skrypcie ROTATOR. Jeśli nie będziemy mieć innej takiej zmiennej, to skrypty nie powinny się gryźć.<br />
Dodatkowo pokazaliśmy, jak sobie poradzić z funkcją <span style="font-family: 'Courier New', Courier, monospace;">setTimeout</span>, aby nie wywoływać funkcji zewnętrznej, tylko funkcję zamkniętą w zmiennej ROTATOR.Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com1tag:blogger.com,1999:blog-7120077619537863812.post-31130590533177291912011-12-04T11:38:00.005+01:002012-02-22T08:21:45.087+01:00Znak wodny na wszystkich obrazkach w kataloguCześć,<br />
pokażę, jak dodać do zdjęć znak wodny, nie modyfikując i bez żadnych przeróbek wcześniejszego kodu.<br />
Zakładamy, że zdjęcia znajdują się na serwerze w katalogu <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">images</span>.<br />
Do tego katalogu wrzucamy obrazek ze znakiem wodnym najlepiej w formacie PNG, aby mieć wpływ na przeźroczystość. Niech się nazywa <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">watermark.png</span>.<br />
<br />
<a name='more'></a><br />
<br />
Wrzucamy też plik <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">watermark.php</span>, który będzie nakładał znak wodny do zdjęć:<br />
<table style="width: 100%;"><tbody>
<tr><td style="background-color: #fbd4b4; border-bottom-color: rgb(136, 136, 136); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(136, 136, 136); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(136, 136, 136); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(136, 136, 136); border-top-style: solid; border-top-width: 1px;"><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><?php</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">// ścieżka zdjęcia na serwerze:</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">$path = $_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'];</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">// tworzy zdjęcie z załadowanego pliku:</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">$image = imagecreatefromstring(file_get_contents($path));</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">// pobiera wymiary zdjęcia:</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">$w = imagesx($image);</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">$h = imagesy($image);</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">// ładuje znak wodny i pobiera jego wymiary:</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">$watermark = imagecreatefrompng('watermark.png');</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">$ww = imagesx($watermark);</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">$wh = imagesy($watermark);</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">// nakłada znak wodny na obrazek w prawym dolnym rogu:</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">imagecopy($image, $watermark, $w-$ww, $h-$wh, 0, 0, $ww, $wh);</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">// Wysyła obrazek do przeglądarki w formacie JPG i jakości 90%:</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">header('Content-type: image/jpeg');</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">imagejpeg($image, null, 90);</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">// dla pewności:</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">exit();</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br />
</span></td></tr>
</tbody></table><br />
Oczywiście należy uważać, aby białe znaki nie wkradły się do kodu. Najlepiej nie zamykać znacznika PHP.<br />
<br />
Na koniec trzeba utworzyć plik <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">.htaccess</span> w katalogu <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">images</span> o zawartości:<br />
<table style="width: 100%;"><tbody>
<tr><td style="background-color: #fbd4b4; border: 1px solid #888; font-family: 'Courier New', Courier, monospace;"># Włączamy mod_rewrite:<br />
RewriteEngine On<br />
# Jeśli przeglądarka wywołuje istniejący plik<br />
RewriteCond %{REQUEST_FILENAME} -f<br />
# i ma odpowiednie rozszerzenie, to przepuść ten plik przez skrypt:<br />
RewriteRule \.(gif|jpeg|jpg|png)$ watermark.php<br />
<br />
</td></tr>
</tbody></table><br />
Łatwe?Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com2tag:blogger.com,1999:blog-7120077619537863812.post-56221920855624088942011-11-02T19:14:00.002+01:002011-11-02T19:20:34.165+01:00Uniwersalne przekierowanie z www na bez www w htaccessWitam,<br />
<br />
pokażę, jak przekierować dowolną stronę z www na bez www.<br />
Dzięki temu przekierowaniu nie trzeba zmieniać .htaccess za każdym razem.<br />
<br />
<pre>RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</pre><br />
Objaśnienia:<br />
<br />
<ul><li><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">RewriteCond %{HTTP_HOST} ^www\.(.*)$</span> - sprawdza, czy nazwa hosta zaczyna się od www. Nawias zapisuje się do zmiennej %1.</li>
<li><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">[NC]</span> - no case, czyli brak rozróżnianie wielkich i małych liter.</li>
<li><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">RewriteRule ^(.*)$ http://%1/$1</span> - nawias jest zapisany do zmiennej $1 i następuje przekierowanie.</li>
<li><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">R=301</span> - przekierowanie typu 301</li>
<li><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">L</span> - last, czyli poinformowanie, aby następne reguły nie były przetwarzane.</li>
</ul>Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com0tag:blogger.com,1999:blog-7120077619537863812.post-84646592786444683372011-09-08T19:13:00.002+02:002011-09-08T19:17:04.725+02:00Jak dodać wpis do śledzika na naszej klasiePokażę, jak dodać wpis do śledzika na naszej klasie przez FireBug.<br />
Najpierw trzeba się <span class="Apple-style-span" style="color: #444444;">(niestety)</span> zalogować.<br />
Odpalamy FireBug'a i konsoli wklejamy kod:<br />
<br />
<br />
<table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184;"><tbody>
<tr> <td style="background: #FBD4B4; border: solid black 1.0pt; mso-background-themecolor: accent6; mso-background-themetint: 102; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"><div style="margin-bottom: .0001pt; margin: 0cm;"><span style="color: black; font-family: 'Courier New';">var iframe = document.getElementById('nk_portal');<o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm;"><span style="color: black; font-family: 'Courier New';">var frameDoc = iframe.contentDocument || iframe.contentWindow.document;<o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm;"><span style="color: black; font-family: 'Courier New';">var el = frameDoc.getElementById('sledzik_form_content');<o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm;"><span style="color: black; font-family: 'Courier New';">var forma=frameDoc.getElementById('sledzik_form');<o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm;"><span style="color: black; font-family: 'Courier New';">el.value='<b>Treść wpisu</b>';<o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm;"><span style="color: black; font-family: 'Courier New';">forma.submit();</span><span style="color: black;"><o:p></o:p></span></div></td> </tr>
</tbody></table><br />
<div class="MsoNormal"><br />
</div><br />
<div>Klikamy 'Uruchom' i już, dokument się przeładuje i można znów odpalić skrypcik.<br />
Oczywiście na stronie musi być forma do wpisów śledzika.</div><div><br />
</div><div>Jak ktoś zna inny sposób na dodanie wpisu do śledzika, niech da w komentarzu.</div><div><br />
</div>Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com1tag:blogger.com,1999:blog-7120077619537863812.post-64675818739173357852011-06-21T07:49:00.000+02:002011-06-21T07:49:49.297+02:00Jak korzystać z innego configu pagincaji w KO3<div class="MsoNormal"><span style="font-family: "Tahoma","sans-serif"; font-size: 11.0pt;">Załóżmy, że w pliku </span><span style="font-family: "Courier New"; font-size: 11.0pt;">config/pagination.php</span><span style="font-family: "Tahoma","sans-serif"; font-size: 11.0pt;"> mamy:<o:p></o:p></span></div><div class="MsoNormal"><br />
</div><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184;"><tbody>
<tr style="mso-yfti-firstrow: yes; mso-yfti-irow: 0; mso-yfti-lastrow: yes;"> <td style="background: #FDE9D9; border: solid black 1.0pt; mso-background-themecolor: accent6; mso-background-themetint: 51; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 508.65pt;" valign="top" width="678"> <div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><?php defined('SYSPATH') or die('No direct script access.');<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;">return array(<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>'default' => array(<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>'current_page'<span style="mso-spacerun: yes;"> </span>=> array('source' => 'route', 'key' => 'id'),<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>'total_items'<span style="mso-spacerun: yes;"> </span>=> 0,<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>'items_per_page'<span style="mso-spacerun: yes;"> </span>=> 10,<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>'view'<span style="mso-spacerun: yes;"> </span>=> 'pagination/floating',<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>'auto_hide'<span style="mso-spacerun: yes;"> </span>=> true,<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>'first_page_in_url' => false,<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>),<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>'other' => array(<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>'current_page'<span style="mso-spacerun: yes;"> </span>=> array('source' => 'route', 'key' => 'id'),<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>'total_items'<span style="mso-spacerun: yes;"> </span>=> 0,<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>'items_per_page'<span style="mso-spacerun: yes;"> </span>=> 50,<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>'view'<span style="mso-spacerun: yes;"> </span>=> 'pagination/basic',<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>'auto_hide'<span style="mso-spacerun: yes;"> </span>=> false,<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>'first_page_in_url' => true,<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>),<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;">);</span><span style="font-family: "Tahoma","sans-serif"; font-size: 11.0pt;"><o:p></o:p></span></div></td> </tr>
</tbody></table><div class="MsoNormal"><br />
</div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Tahoma","sans-serif"; font-size: 11.0pt;">Zwykle korzystamy z ustawienia </span><span style="font-family: "Courier New"; font-size: 11.0pt;">'default'</span><span style="font-family: "Tahoma","sans-serif"; font-size: 11.0pt;">:<o:p></o:p></span></div><div class="MsoNormal"><br />
</div><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184;"><tbody>
<tr style="mso-yfti-firstrow: yes; mso-yfti-irow: 0; mso-yfti-lastrow: yes;"> <td style="background: #FDE9D9; border: solid black 1.0pt; mso-background-themecolor: accent6; mso-background-themetint: 51; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 530.3pt;" valign="top" width="707"> <div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;">$gallery_pagination = Pagination::factory(array(<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>'total_items' => $gallery->countAll(),<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>));</span><span style="font-family: "Tahoma","sans-serif"; font-size: 11.0pt;"><o:p></o:p></span></div></td> </tr>
</tbody></table><div class="MsoNormal"><span style="font-family: "Tahoma","sans-serif"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span><o:p></o:p></span></div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Tahoma","sans-serif"; font-size: 11.0pt;">Jeśli chcemy skorzystać z innych ustawień, nie wpisując wszystkich ustawień za każdym razem, gdy tworzymy paginację, możemy przekazać w tablicy w metodzie </span><span style="font-family: "Courier New"; font-size: 11.0pt;">factory</span><span style="font-family: "Tahoma","sans-serif"; font-size: 11.0pt;"> indeks </span><span style="font-family: "Courier New"; font-size: 11.0pt;">'group'</span><span style="font-family: "Tahoma","sans-serif"; font-size: 11.0pt;">. Oczywiście można użyć innych opcji, które nadpiszą te z configu:<o:p></o:p></span></div><div class="MsoNormal"><br />
</div><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184;"><tbody>
<tr style="mso-yfti-firstrow: yes; mso-yfti-irow: 0; mso-yfti-lastrow: yes;"> <td style="background: #FDE9D9; border: solid black 1.0pt; mso-background-themecolor: accent6; mso-background-themetint: 51; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 530.3pt;" valign="top" width="707"> <div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;">$gallery_pagination = Pagination::factory(array(<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>'group' => 'other',<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span>'total_items' => $gallery->countAll(),<o:p></o:p></span></div><div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span>));</span><span style="font-family: "Tahoma","sans-serif"; font-size: 11.0pt;"><o:p></o:p></span></div></td> </tr>
</tbody></table><div class="MsoNormal"><br />
</div><div class="MsoNormal"><br />
</div><div class="MsoNormal"><span style="font-family: "Tahoma","sans-serif"; font-size: 11.0pt;">Można sprawdzić, co się wyświetli:<o:p></o:p></span></div><div class="MsoNormal"><br />
</div><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184;"><tbody>
<tr style="mso-yfti-firstrow: yes; mso-yfti-irow: 0; mso-yfti-lastrow: yes;"> <td style="background: #FDE9D9; border: solid black 1.0pt; mso-background-themecolor: accent6; mso-background-themetint: 51; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 530.3pt;" valign="top" width="707"> <div class="MsoNormal"><span style="font-family: "Courier New"; font-size: 11.0pt;">echo $gallery_pagination->render();<o:p></o:p></span></div></td> </tr>
</tbody></table><div class="MsoNormal"><br />
</div><div class="MsoNormal"><br />
</div>Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com0tag:blogger.com,1999:blog-7120077619537863812.post-63515844141167071612011-05-24T13:23:00.002+02:002011-05-28T20:09:38.306+02:00Obsługa błędu 404 w Kohana 3.0 - plik bootstrap.php<div style="background-color: white; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;"><br />
<div style="background: white; margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><span class="Apple-style-span" style="font-family: Calibri, sans-serif;"></span></div><div style="background: white; margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"></div><div style="background: white; margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><span class="Apple-style-span" style="font-family: Calibri, sans-serif;"><span style="color: black; font-family: "Calibri","sans-serif"; font-size: 9.0pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;">Kod należy umieścić w pliku </span><span style="color: black; font-family: "Courier New"; font-size: 9.0pt;">bootstrap.php</span><span style="color: black; font-family: "Calibri","sans-serif"; font-size: 9.0pt; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;">:<o:p></o:p></span></span></div><span class="Apple-style-span" style="font-family: Calibri, sans-serif;"> <table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184;"><tbody>
<tr style="mso-yfti-firstrow: yes; mso-yfti-irow: 0; mso-yfti-lastrow: yes;"> <td style="background: #FDE9D9; border: solid black 1.0pt; mso-background-themecolor: accent6; mso-background-themetint: 51; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"> <div style="margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><span style="color: black; font-family: "Courier New"; font-size: 9.0pt;"><span style="mso-spacerun: yes;"> </span>$request = Request::instance();<o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><span style="color: black; font-family: "Courier New"; font-size: 9.0pt;"><span style="mso-spacerun: yes;"> </span>try {<o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><span style="color: black; font-family: "Courier New"; font-size: 9.0pt;"><span style="mso-spacerun: yes;"> </span>$request->execute();<o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><span style="color: black; font-family: "Courier New"; font-size: 9.0pt;"><span style="mso-spacerun: yes;"> </span>} catch (Exception $e) {<o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><span style="color: black; font-family: "Courier New"; font-size: 9.0pt;"><span style="mso-spacerun: yes;"> </span>Kohana::$log->add(Kohana::ERROR, Kohana::exception_text($e));<o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><span style="color: black; font-family: "Courier New"; font-size: 9.0pt;"><span style="mso-spacerun: yes;"> </span><o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><span style="color: black; font-family: "Courier New"; font-size: 9.0pt;"><span style="mso-spacerun: yes;"> </span>if(Kohana::$environment == Kohana::PRODUCTION){<o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><span style="color: black; font-family: "Courier New"; font-size: 9.0pt;"><span style="mso-spacerun: yes;"> </span>$request->status = 404;<o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><span style="color: black; font-family: "Courier New"; font-size: 9.0pt;"><span style="mso-spacerun: yes;"> </span>$request->response = View::factory('error/404');<o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><span style="color: black; font-family: "Courier New"; font-size: 9.0pt;"><span style="mso-spacerun: yes;"> </span>}<o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><span style="color: black; font-family: "Courier New"; font-size: 9.0pt;"><span style="mso-spacerun: yes;"> </span>else{<o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><span style="color: black; font-family: "Courier New"; font-size: 9.0pt;"><span style="mso-spacerun: yes;"> </span>throw $e;<o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><span style="color: black; font-family: "Courier New"; font-size: 9.0pt;"><span style="mso-spacerun: yes;"> </span>}<span style="mso-spacerun: yes;"> </span><o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><span style="color: black; font-family: "Courier New"; font-size: 9.0pt;"><span style="mso-spacerun: yes;"> </span>}<o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><br />
</div><div style="margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><span style="color: black; font-family: "Courier New"; font-size: 9.0pt;"><span style="mso-spacerun: yes;"> </span>$request->send_headers();<o:p></o:p></span></div><div style="margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><span style="color: black; font-family: "Courier New"; font-size: 9.0pt;"><span style="mso-spacerun: yes;"> </span>echo $request->response;</span><span style="color: black; font-size: 9.0pt;"><o:p></o:p></span></div></td> </tr>
</tbody></table><div style="background: white; margin-bottom: .0001pt; margin: 0cm; mso-add-space: auto;"><br />
</div><div class="MsoNormalCxSpFirst" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto;"><span style="font-size: 9.0pt;">Oczywiście, dla tego przypadku należy dodać plik </span><span style="font-family: "Courier New"; font-size: 9.0pt;">404.php</span><span style="font-size: 9.0pt;"> w katalogu </span><span style="font-family: "Courier New"; font-size: 9.0pt;">views/error</span><span style="font-size: 9.0pt;">.<o:p></o:p></span></div><div class="MsoNormalCxSpMiddle" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto;"><br />
</div><div class="MsoNormalCxSpMiddle" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto;"><span style="font-size: 9.0pt;">W zależności od ustawienia <br style="mso-special-character: line-break;" /> <!--[if !supportLineBreakNewLine]--><br style="mso-special-character: line-break;" /> <!--[endif]--><o:p></o:p></span></div><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184;"><tbody>
<tr style="mso-yfti-firstrow: yes; mso-yfti-irow: 0; mso-yfti-lastrow: yes;"> <td style="background: #FDE9D9; border: solid black 1.0pt; mso-background-themecolor: accent6; mso-background-themetint: 51; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"> <div class="MsoNormalCxSpMiddle" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto;"><span style="font-size: 9.0pt;">Kohana::$environment = Kohana::DEVELOPMENT;<o:p></o:p></span></div></td> </tr>
</tbody></table><div class="MsoNormalCxSpMiddle" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto;"><span style="font-size: 9.0pt;">lub<o:p></o:p></span></div><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184;"><tbody>
<tr style="mso-yfti-firstrow: yes; mso-yfti-irow: 0; mso-yfti-lastrow: yes;"> <td style="background: #FDE9D9; border: solid black 1.0pt; mso-background-themecolor: accent6; mso-background-themetint: 51; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-themecolor: text1; padding: 0cm 5.4pt 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"> <div class="MsoNormalCxSpMiddle" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto;"><span style="font-size: 9.0pt;">Kohana::$environment = Kohana::PRODUCTION;<o:p></o:p></span></div></td> </tr>
</tbody></table><div class="MsoNormalCxSpMiddle" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto;"><br />
</div><div class="MsoNormalCxSpMiddle" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto;"><span style="font-size: 9.0pt;">wyświetlana jest strona błędu Kohany lub widok z pliku </span><span style="font-family: "Courier New"; font-size: 9.0pt;">404.php</span><span style="font-size: 9.0pt;"><o:p></o:p></span></div><div class="MsoNormalCxSpMiddle" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-add-space: auto;"><br />
</div></span><br />
</div>Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com0tag:blogger.com,1999:blog-7120077619537863812.post-27385061025717966232011-04-18T11:00:00.002+02:002011-04-18T11:02:20.345+02:00Problem z mapą witryny w Google Narzędzia dla webmasterówJeśli otrzymasz taki komunikat błędu:<br />
<br />
<b>Napotkaliśmy błąd podczas próby dostępu do tej mapy witryny. Sprawdź, czy mapa witryny jest zgodna z naszymi wymogami i można do niej uzyskać dostęp w podanej lokalizacji, a następnie prześlij ponownie.<br />
</b><br />
i masz pewność, że <i>mapa witryny</i> jest dobrze wygenerowana, to wyślij na serwer plik <b>robots.txt</b> np. z taką zawartością: <br />
<pre>User-agent: *
Allow: / </pre>Powinno być już OK.Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com0tag:blogger.com,1999:blog-7120077619537863812.post-65284814783479777882011-03-16T16:12:00.003+01:002011-03-16T16:21:01.279+01:00Przenoszenie elementów między listami: drag&drop, zaznacz-kliknij-przenieś<div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Przenoszenie elementów między dwoma listami dwoma sposobami na raz:</div><div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 36pt; text-indent: -18pt;"><span style="font-family: Symbol;">-<span style="font: 7pt "Times New Roman";"> </span></span>za pomocą drag&drop,</div><div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 36pt; text-indent: -18pt;"><span style="font-family: Symbol;">-<span style="font: 7pt "Times New Roman";"> </span></span>poprzez zaznaczenie elementu i przeniesienie przyciskiem.</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Zrobimy to przy pomocy jQuery UI:</div><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: medium none;"><tbody>
<tr> <td style="background: none repeat scroll 0% 0% rgb(253, 233, 217); border: 1pt solid black; padding: 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"><script type="text/javascript" src="js/jquery-1.4.4.min.js"></script></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"><script type="text/javascript" src="js/jquery-ui-1.8.10.custom.min.js"></script></span></div></td> </tr>
</tbody></table><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><a name='more'></a><br />
<div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Najpierw tworzymy strukturę HTML: kontener, dwie listy z <span style="font-family: "Courier New";">id=„box1”</span> i <span style="font-family: "Courier New";">id=„box2”</span> oraz cztery przyciski do przenoszenia elementów (po dwa na każdą stronę do elementów pojedynczych oraz całości).</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Dla przejrzystości ustawiamy listy obok siebie, a między nimi przyciski.</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="background: none repeat scroll 0% 0% rgb(253, 233, 217); border-collapse: collapse; border: medium none;"><tbody>
<tr> <td style="border: 1pt solid black; padding: 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"><div style="border:1px solid #888;float:left;"></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> <ul id="box1" style="float:left;"></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> <li class="elem" value="10">dziesięć</li></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> <li class="elem" value="20">dwadzieścia</li></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> <li class="elem" value="30">trzydzieści</li></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> <li class="elem" value="40">4dzieści</li></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> <li class="elem" value="50">5dziesiąt</li></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> <li class="elem" value="60">6dziesiąt</li></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> <li class="elem" value="70">7dziesiąt</li></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> <li class="elem" value="80">8dziesiąt</li></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> <li class="elem" value="90">9dziesiąt</li></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> <li class="elem" value="100">sto</li></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> </ul></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"><div style="float:left; text-align: center;"></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> <button id="add">&gt;</button><br /></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> <button id="remove">&lt;</button><br /></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> <button id="add_all">&gt;&gt;</button><br /></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> <button id="remove_all">&lt;&lt;</button><br /></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"></div></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"><ul id="box2" style="float:left;"></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"></ul></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"></div></span></div></td> </tr>
</tbody></table><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Następnie nadajemy style.</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Elementy listy (<span style="font-family: "Courier New";">.elem</span>) są pozbawione punktorów, mają ramkę i białe tło.</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Element zaznaczony będzie miał żółte tło.</div><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: medium none;"><tbody>
<tr> <td style="background: none repeat scroll 0% 0% rgb(253, 233, 217); border: 1pt solid black; padding: 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"><style media="screen" type="text/css"></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";">button{</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> margin: 5px;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";">}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";">#box1, #box2{</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> padding:0;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> margin:0;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> overflow: auto;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> width: 200px;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> height: 200px;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";">}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";">#box1{</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> background-color: #CCFFFF;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";">}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";">#box2{</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> background-color: #CCFF99;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";">}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";">.elem{</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> border:1px solid #888;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> background-color:#fff;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> margin:2px;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> list-style:none;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> padding:0;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> overflow:auto;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";">}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";">.selected{</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> background-color: #FF0;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";">}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"></style></span></div></td> </tr>
</tbody></table><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">No to jazda!!!</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Operacje na elementach listy będziemy wykonywać, gdy wczytamy cały dokument:</div><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: medium none;"><tbody>
<tr> <td style="background: none repeat scroll 0% 0% rgb(253, 233, 217); border: 1pt solid black; padding: 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"><script type="text/javascript"></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";">$(document).ready(function(){</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";">});</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"></script></span></div></td> </tr>
</tbody></table><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Zacznijmy od zaznaczenia elementu.</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Gdy klikniemy element oznaczony klasą <span style="font-family: "Courier New";">elem</span>, dodajemy do tego elementu drugą klasę <span style="font-family: "Courier New";">selected</span>.</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Robimy to za pomocą usunięcia klasy <span style="font-family: "Courier New";">selected</span> ze wszystkich elementów listy i nadajemy wybranemu elementowi klasę <span style="font-family: "Courier New";">selected</span>.</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Dzięki temu będziemy mieć tylko jeden oznaczony element.</div><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: medium none;"><tbody>
<tr> <td style="background: none repeat scroll 0% 0% rgb(253, 233, 217); border: 1pt solid black; padding: 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> $('.elem').click(function(){</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> $('.elem').removeClass('selected');</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> $(this).addClass('selected');</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> });</span></div></td> </tr>
</tbody></table><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Teraz wykorzystamy jQuery UI, z tego plugin Sortable. Dzięki temu będzie można przenosić elementy metodą drag&drop.</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Listę <span style="font-family: "Courier New";">#box1</span> ustawiamy na <span style="font-family: "Courier New";">sortable()</span>.</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Dodajemy opcje:</div><div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0.0001pt 36pt; text-indent: -18pt;"><span style="font-family: Symbol;">-<span style="font: 7pt "Times New Roman";"> </span></span><span style="font-family: "Courier New";">connectWith: '#box2'</span> – łączymy z drugą listą <span style="font-family: "Courier New";">#box2</span>, która musi być ustawiona na <span style="font-family: "Courier New";">sortable()</span>,</div><div class="MsoListParagraphCxSpMiddle" style="margin: 0cm 0cm 0.0001pt 36pt; text-indent: -18pt;"><span style="font-family: Symbol;">-<span style="font: 7pt "Times New Roman";"> </span></span><span style="font-family: "Courier New";">cursor: 'move'</span> – ustawiamy wygląd kursora na „przenoszenie”,</div><div class="MsoListParagraphCxSpLast" style="margin: 0cm 0cm 0.0001pt 36pt; text-indent: -18pt;"><span style="font-family: Symbol;">-<span style="font: 7pt "Times New Roman";"> </span></span><span style="font-family: "Courier New";">stop: function(ev,ui){ }</span> – zdarzenie; jest wywoływane, gdy sortowanie się zatrzymuje. W przykładzie sprawdzamy, czy rodzic przenoszonego elementu (<span style="font-family: "Courier New";">ui.item</span>) ma <span style="font-family: "Courier New";">id</span> równy <span style="font-family: "Courier New";">box1</span>. Jeśli tak, to niech zdarzenie zwróci <span style="font-family: "Courier New";">false</span>, dzięki czemu element nie zostanie przeniesiony na inną pozycję w tej liście. Na koniec sprawdźmy, czy rzeczywiście przeniesiony element do drugiej listy jest prawidłowy.</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: medium none;"><tbody>
<tr> <td style="background: none repeat scroll 0% 0% rgb(253, 233, 217); border: 1pt solid black; padding: 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> $('#box1').sortable({</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> connectWith: '#box2',</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> cursor: 'move',</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> stop: function(ev,ui){</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> if(ui.item.parent().attr('id')=='box1'){</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> return false;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> }</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> alert(ui.item.attr('value'));</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> },</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> });</span></div></td> </tr>
</tbody></table><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Podobnie zrobimy dla drugiej listy <span style="font-family: "Courier New";">#box2</span>:</div><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: medium none;"><tbody>
<tr> <td style="background: none repeat scroll 0% 0% rgb(253, 233, 217); border: 1pt solid black; padding: 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> $('#box2').sortable({</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> connectWith: '#box1',</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> cursor: 'move',</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> stop: function(ev,ui){</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> if(ui.item.parent().attr('id')=='box2'){</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> return false;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> }</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> alert(ui.item.attr('value'));</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> },</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> });</span></div></td> </tr>
</tbody></table><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Teraz zajmiemy się przyciskami.</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Przycisk <span style="font-family: "Courier New";">#add</span> przenosi zaznaczony element z listy <span style="font-family: "Courier New";">#box1</span> do listy <span style="font-family: "Courier New";">#box2</span>.</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Znajdujemy zaznaczony element z listy <span style="font-family: "Courier New";">#box1</span>, tzn. który ma klasę <span style="font-family: "Courier New";">selected</span>, sprawdzamy, czy taki istnieje.</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Jeśli nie, to wychodzimy z funkcji. W przeciwnym wypadku przenosimy go do listy <span style="font-family: "Courier New";">#box2</span> i sprawdzamy, czy to prawidłowy element.</div><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: medium none;"><tbody>
<tr> <td style="background: none repeat scroll 0% 0% rgb(253, 233, 217); border: 1pt solid black; padding: 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> $('#add').click(function(){</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> var elem = $('#box1 .selected');</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> if(elem.length == 0){</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> return;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> }</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> var val = elem.attr('value');</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> elem.appendTo('#box2');</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> alert(val);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> });</span></div></td> </tr>
</tbody></table><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Podobnie dla przycisku <span style="font-family: "Courier New";">#remove</span>, który przenosi zaznaczony element z listy <span style="font-family: "Courier New";">#box2</span> do <span style="font-family: "Courier New";">#box1</span>.</div><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: medium none;"><tbody>
<tr> <td style="background: none repeat scroll 0% 0% rgb(253, 233, 217); border: 1pt solid black; padding: 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> $('#remove').click(function(){</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> var elem = $('#box2 .selected');</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> if(elem.length == 0){</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> return;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> }</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> var val = elem.attr('value');</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> elem.appendTo('#box1');</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> alert(val);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> });</span></div></td> </tr>
</tbody></table><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Na koniec zostały dwa przyciski, które przenoszą wszystkie elementy.</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Przyckisk <span style="font-family: "Courier New";">#add_all</span> przenosi wszystkie elementy z klasą <span style="font-family: "Courier New";">elem</span> z <span style="font-family: "Courier New";">#box1</span> do <span style="font-family: "Courier New";">#box2</span>.</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Dodatkowo w zastosowanej funkcji <span style="font-family: "Courier New";">each()</span> wyświetlamy przeniesione elementy.</div><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: medium none;"><tbody>
<tr> <td style="background: none repeat scroll 0% 0% rgb(253, 233, 217); border: 1pt solid black; padding: 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> $('#add_all').click(function(){</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> $('#box1 .elem').appendTo('#box2').each(function(){</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> alert($(this).attr('value'));</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> });</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> });</span></div></td> </tr>
</tbody></table><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Podobnie w drugą stronę z przyciskiem <span style="font-family: "Courier New";">#remove_all</span>.</div><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: medium none;"><tbody>
<tr> <td style="background: none repeat scroll 0% 0% rgb(253, 233, 217); border: 1pt solid black; padding: 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> $('#remove_all').click(function(){</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> $('#box2 .elem').appendTo('#box1').each(function(){</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> alert($(this).attr('value'));</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> });</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><span style="font-family: "Courier New";"> });</span></div></td> </tr>
</tbody></table><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;">Teraz wystarczy ułożyć kod i będziemy mogli przenosić elementy między dwoma listami na dwa sposoby: drag&drop i select-click-carry. A całość wygląda tak:<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://lh6.googleusercontent.com/-cCcqyfWoqvw/TYDVRyV6P2I/AAAAAAAAAGw/55V5jve3V2Y/s1600/przenoszenie-elementow.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://lh6.googleusercontent.com/-cCcqyfWoqvw/TYDVRyV6P2I/AAAAAAAAAGw/55V5jve3V2Y/s1600/przenoszenie-elementow.jpg" /></a></div><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;"><br />
</div>Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com1tag:blogger.com,1999:blog-7120077619537863812.post-65228574630059878622011-03-03T09:23:00.002+01:002011-03-05T10:13:11.068+01:00Dostęp sieci w VirtualBoxMam Windows XP,<b> maszynę wirtualną</b> z Ubuntu.<br />
<br />
Pierwsza karta sieciowa <b>VirtualBox</b> jest ustawiona na NAT, dzięki czemu z <b>VB</b> jest dostęp do Internetu.<br />
W Ubuntu mam postawiony serwer WWW, jednak nie można się odwołać do niego przez IP. Zatem należy uaktywnić drugą kartę sieciową typu host-only, jednak teraz nie ma dostępu do internetu.<br />
Rozwiązanie jest takie, aby dwie pierwsze karty ustawić na NAT, a trzecią na host-only.<br />
Wtedy Ubuntu widzi dwie karty: pierwsza łączy się z Internetem, dzięki drugiej jest dostęp w Windows.Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com0tag:blogger.com,1999:blog-7120077619537863812.post-69252371349291708752011-02-09T19:36:00.001+01:002011-03-20T16:58:32.107+01:00Trójkolumnowy układ strony<div class="MsoNormal">Układ trójkolumnowy strony przy pomocy div’ów:</div><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: medium none;"><tbody>
<tr> <td style="background: none repeat scroll 0% 0% rgb(253, 233, 217); border: 1pt solid black; padding: 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"><html></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"><head></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"><title>3 kolumy</title></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"><meta http-equiv="content-type" content="text/html; charset=UTF-8"></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"><style type="text/css"></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> * {</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> margin:0px;</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> padding:0px;</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> }</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> #wrapper {</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> width:1000px;</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> margin: 0px auto;</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> }</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> #left {</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> float: left;</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> background-color: red;</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> width: 200px;</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> }</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> #right {</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> float: right;</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> background-color: yellow;</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> width: 200px;</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> }</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> #content {</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> background-color: pink;</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> }</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"></style></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"></head></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"><body></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"><div id="wrapper"></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> <div id="left"></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> left</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> </div></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> <div id="right"></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> right</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> </div></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> <div id="content"></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> content</span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"> </div></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"></div></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"></body></span></div><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New";"></html></span></div></td> </tr>
</tbody></table><div class="MsoNormal"><br />
</div><div class="MsoNormal"><b>Ważna jest kolejność div’ów</b> - najpierw lewy, potem prawy, na końcu umieszczamy środkowy - wtedy szerokość środkowej części automatycznie się dopasuje.</div><div class="MsoNormal"><br />
</div><div class="MsoNormal">Dodatkowo możemy ustawić szerokość naszej strony na np. <span style="font-family: "Courier New";">1000px</span> oraz wyśrodkować przez <span style="font-family: "Courier New";">margin: 0px auto</span> (górny i dolny margines na 0px, lewy i prawy automatycznie ustawiany przez przeglądarkę).</div>Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com0tag:blogger.com,1999:blog-7120077619537863812.post-69967736318292201982011-02-08T10:23:00.004+01:002011-02-08T10:35:31.336+01:00Renderowanie obrazków w Kohana 3<div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Times New Roman","serif"; font-size: small;">Aby pokazać obrazek w locie (np. miniaturka, ze znakiem wodnym), w PHP tworzymy obrazek, podajemy typ mime oraz wysyłamy do przeglądarki:</span></div><table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse;"><tbody>
<tr> <td style="background: none repeat scroll 0% 0% rgb(253, 233, 217); border: 1pt solid black; padding: 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;">header('Content-type: image/jpeg');</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;">$img = imagecreatefromjpeg('plik.jpeg');</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;">imagejpeg($img);</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;">imagedestroy($img);</span><span style="font-family: "Times New Roman","serif"; font-size: small;"></span></div></td> </tr>
</tbody></table><div class="MsoNormal" style="line-height: normal;"><span style="font-size: small;"><br />
</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Times New Roman","serif"; font-size: small;">W Kohana wygląda to tak:</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Times New Roman","serif"; font-size: small;">W kontrolerze np. </span><span style="font-family: "Courier New"; font-size: small;">obrazek.php</span><span style="font-family: "Times New Roman","serif"; font-size: small;"> dodajemy akcję </span><span style="font-family: "Courier New"; font-size: small;">action_render()</span><span style="font-family: "Times New Roman","serif"; font-size: small;">. Podobnie, jak w czystym PHP, musimy utworzyć obrazek z pliku, podać typ wysyłanych danych, wysłać je w nagłówkach oraz zwrócić wyrenderowany obrazek:</span></div><table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse;"><tbody>
<tr> <td style="background: none repeat scroll 0% 0% rgb(253, 233, 217); border: 1pt solid black; padding: 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;"><?php defined('SYSPATH') or die('No direct script access.');</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-size: small;"><br />
</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;">class Controller_Obrazek extends Controller {</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;"> public function action_render(){</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;"> $this->request->headers['Content-type']='image/jpeg';</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;"> $this->request->send_headers();</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;"> $img=Image::factory('media/images/obraz.jpg');</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;"> $this->request->response=$img->render('jpg');</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;"> </span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;"> }</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;">}</span></div></td> </tr>
</tbody></table><div class="MsoNormal" style="line-height: normal;"><span style="font-size: small;"><br />
</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Times New Roman","serif"; font-size: small;">Wywołujemy następująco:</span></div><table border="0" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: medium none;"><tbody>
<tr> <td style="background: none repeat scroll 0% 0% rgb(253, 233, 217); border: 1pt solid black; padding: 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New"; font-size: small;"><?php echo Html::image('obrazek/render'); ?></span></div></td> </tr>
</tbody></table><div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"><span style="font-size: small;"><br />
</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Times New Roman","serif"; font-size: small;">W ten sposób można również ukryć ścieżkę do zdjęć.</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Times New Roman","serif"; font-size: small;">Oczywiście można przekazać do akcji dowolny obrazek:</span></div><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: medium none;"><tbody>
<tr> <td style="background: none repeat scroll 0% 0% rgb(253, 233, 217); border: 1pt solid black; padding: 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"><div class="MsoNormal" style="line-height: 115%; margin-bottom: 0.0001pt;"><span style="font-family: "Courier New"; font-size: small; line-height: 115%;"><?php echo Html::image('obrazek/render/' . $nazwa_pliku); ?></span></div></td> </tr>
</tbody></table><div class="MsoNormal" style="line-height: normal;"><span style="font-size: small;"><br />
</span></div><table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse;"><tbody>
<tr> <td style="background: none repeat scroll 0% 0% rgb(253, 233, 217); border: 1pt solid black; padding: 0cm 5.4pt; width: 460.6pt;" valign="top" width="614"><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;"><?php defined('SYSPATH') or die('No direct script access.');</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-size: small;"><br />
</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;">class Controller_Obrazek extends Controller {</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;"> public function action_render(){</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;"> $nazwa_pliku=$this->request->param('id'); //zależnie od ustawień w bootstrap.php</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;"> $this->request->headers['Content-type']='image/jpeg';</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;"> $this->request->send_headers();</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;"> $img=Image::factory('upload/' . $nazwa_pliku);</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;"> $this->request->response=$img->render('jpg');</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;"> }</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-family: "Courier New"; font-size: small;">}</span></div></td> </tr>
</tbody></table><div class="MsoNormal" style="line-height: normal;"><span style="font-size: small;"><br />
</span></div><div class="MsoNormal" style="line-height: normal;"><span style="font-size: small;"><br />
</span></div><div class="MsoNormal"><span style="font-size: small;"><br />
</span></div>Kornagahttp://www.blogger.com/profile/03247897628815128236noreply@blogger.com2