Systém komentářů pomocí jQuery a Ajax.

 2012-10-27 00:00:00
 Dmitry Burobin

Dnes vytvoříme systém komentářů s automatickou kontrolou vstupních dat pomocí technologie Ajax a přidáváním nového komentáře s použitím jQuery bez znovunačtení stránky.

Série článků:
1) Systém komentářů pomocí jQuery a Ajax.
2) Lajkování neboli karma u komentářů.
3) Strankování.

Vytvoření tabulky a připojení k databázi.

Vytvoříme si tabulku comments, do které budeme ukládat: identifikátor komentáře ( id ), identifikátor rodičovského komentáře ( parent_id ), jméno ( name ), text komentáře ( text ) a datum přidání komentáře ( date ).

CREATE TABLE `comments` (
`id` INT ( 5 ) NOT NULL AUTO_INCREMENT,
`parent_id` INT ( 5 ) NOT NULL,
`name` VARCHAR ( 255 ) NOT NULL,
`komentar` TEXT,
`date` DATETIME,
PRIMARY KEY(`id`)
)ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci

Taktéž si vytvořte soubor db.php, pro připojení k databázi.
<?php
$DBSERVER 'localhost'//server, který bude použít pro navázáníspojení s DB 
$DBUSER 'root'//Váš mysql login, nejspíš je stejný jako u mě pro localhost, tudiž root 
$DBPASS '****'//heslo, které jste zadaval při instalaci MySQL 

$DB 'test'//databáze, s kterou budeme pracovat 

//navazení spojení pomoci mysql_connect  
$link mysql_connect($DBSERVER$DBUSER$DBPASS)  or die("Could not connect: " mysql_error()); 
//vybírame databázi 
mysql_select_db($DB$link) or die ('Can\'t use test : ' mysql_error()); 
//řekněme MySQL, že všechná data jsou ve formatu UTF-8 
mysql_query("SET NAMES UTF8");
?>

index.php

Hlavní stránka bude obsahovat formulář pro přidávání komentářů s polem pro jméno, zprávu a skryté pole, do kterého budeme ukálát identifikátor rodičovského komentáře, pokud někdo bude odpovídat na nějaký komenář. Soubor index.php vypadá takto:

<?php
/*Soubor pro vybírání komentářů z databáze*/
require_once 'comment.php';
?>
<!DOCTYPE html>
<
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">

<
head>
    <
title>Systém komentářů.</title>
    <
meta charset="utf-8" >
    
    <
link rel="stylesheet" href="style.css"> <!-- soubor se styly -->
    <
script src="jquery-1.7.1.min.js"></script> <!-- připojení jquery -->
    <script src="comment.js"></script> <!-- funkce potřebné pro přidávání komentářů -->
    
</head>
<body>
<ul id="commentWrapper">
<?php
/*Zde v proměnné $comments jsou komentáře*/
echo $comments;
?>
<!-- formulář pro přidávání komentářů -->
</
ul>    
    <
div id="commentBox">
        <
input class="validate" type="text" name="name" >
        <
input id="parent" type="hidden" name="parent_id" value="">
        <
div class="commentText">
            <
textarea name="text"></textarea>
        </
div>
        <
button>Přidat</button><img class="loader" src="loader.gif">
    </
div>
</
body>
</
html>

Styly a knihovna jQuery

Pro správné fungování potřebujeme připojit knihovnu jQuery. Tu buď stáhnete z oficiálního webu nebo z archivu s tímto článkem. Pak, aby komentáře líp vypadali přidáme styly, nic složitého v nich není, proto je nebudu popisovat:

body
{
    
margin:0;
    
padding:0;
}
ulli
{
    list-
style-type:none;
}
.
loader
{
    
display:none;
}
#commentBox
{
    
width:400px;
    
padding:10px;
}
#commentBox input
{
    
width:250px;
    
height:25px;
    
padding0 5px;
    
margin:5px;
    
bordersolid 1px #ccc;
    
background:#f1f1f1 url(bg_input.png) no-repeat;
    
font400 12pt/14pt Ume Gothic O5;
}
#commentBox textarea
{
    
width:250px;
    
height:100px;
    
margin5px;
    
padding5px;
    
bordersolid 1px #ccc;
    
background:#f1f1f1 url(bg_koment.png) no-repeat;
    
font400 12pt/14pt Ume Gothic O5;
}
#commentBox button
{
    
height:30px;
    
width:85px;
    
margin-left183px;
    
margin-top:0px;
    
font:700 12pt/14pt Ume Gothic O5;
}
#commentWrap
{
    
width:350px;
    
padding:10px;
    
padding-bottom:3px;
    
margin:10px;
    
border1px solid #ccc;
    
border-radius:10px;
    
background:#f7f7f7;
}
#commentWrap .komentar
{
    
padding:5px;
    
padding-left:0px;
    
border-top:1px solid #ccc;
    
margin-bottom:10px;
    
font:400 12pt/14pt Times New Roman;
}
#commentWrap .replay
{
    
margin-left:270px;
    
font:700 10pt/12pt Ume Gothic O5;
}
#commentWrap a
{
    
text-decoration:none;
}
#commentWrap .commentName
{
    
font:700 10pt/12pt Ume Gothic O5;
}
#commentWrap .commentDate
{
    
font:400 11pt/13pt Times New Roman;
}
.
repName
{
    
font:400 12pt/14pt Times New Roman;
    
font-style:italic;
}
.
repText
{
    
font:700 10pt/12pt Ume Gothic O5;
}
.
repDate
{
    
font:400 9pt/11pt Times New Roman;
    
font-style:italic;
}

comment.php

Tento soubor je určen pro vybírání dat z databáze a vkládání těchto dat do šablony.

<?php
// Vložíme soubor s připojením k databázi. ( musí se nacházet ve stejné složce ) 
require_once 'db.php';

// Vybereme komentáře z databáze
$query mysql_query("
         SELECT `id`,`parent_id`,`name`,`komentar`, 
         DATE_FORMAT(date, '%d %M %Y %H:%i') as date_add
         FROM `comments` ORDER BY `id` ASC 
         "
);
         
// Pokud při vykonání příkazu nastané chyba vypišeme ji
if(!$query) { echo mysql_error() . " - " mysql_errno(); }
else {

// Jinak pomocí cyklusu projdeme všechny záznamy v tabulce
        
while($result mysql_fetch_assoc($query))
        {
            
// a uložíme je do pole $data  
            
$data[$result['id']] = $result;
        }

// Funkce pro vkládání dat ( komentářů ) do šablony
function commentsToTemplate($comment)
{
// $comment - pole komentáře - id, parent_id, name, text, date 
    
// Zapneme bufferování výstupu, aby šablona nebyla zobrazená v místě volání funkce
    
ob_start();  
      
// Připojíme šablonu comment_template.php, do které vložíme data z pole $comment
    
require_once 'comment_template.php';                     
  
// Získáváme obsah bufferu jako řetězec   
    
$comments_string =  ob_get_contents(); 

// Vymažeme všechno z bufferu
    
ob_end_clean();

// Vrácíme komentář jako řetězec   
    
return $comments_string;    
}

// Funkce pro zpracování pole $data, které
// bude rozděleno do jednotlivých komentářů a odesláno funkci 
// commentsToTemplate
function commentsString($data)
{
    foreach(
$data as $w
    {
        
$string .= commentsToTemplate($w);
    }
 
return 
$string
}  

// proměnná $comments obsahuje naše komentáře, které zobrazujeme na hlavní stránce
$comments commentsString($data);

// vynulujeme proměnnou $data 
$data null;
}
?>

comment_template.php

Toto je vlastně šablona jednotlivého komentáře.

<?php
// Do této šablony se načítají data z pole $data, která jsou odesláná funkci commentsToTemplate
echo '<li id="comment'.$comment['id'].'">
    <div id="commentWrap">'
;
        
// Pokud existuje parent_id, pak zobrazíme, že se jedna o odpověď
        
if($comment['parent_id']!=0)
        {
// Vybereme z DB jméno a datum rodičovského komentáře
            
$q mysql_query("SELECT `name`, DATE_FORMAT(date, '%d %M %Y %H:%i') as date_add FROM `comments_my` WHERE `id`='".$comment['parent_id']."'");
            
$r mysql_fetch_assoc($q);
            echo 
'<span class="repText">Odpověď na komentář</span> <span class="repName">
            '
.$r['name'].'
            </span> <span class="repText">from</span> <span class="repDate">
            '
.$r['date_add'].'
            </span><br>'
;
        }
        
// Zobrazíme jméno a datum přidání
echo    '<span class="commentName">'.$comment['name'].'</span> - <span class="commentDate">'.$comment['date_add'].'</span>
        <div class="komentar">
<!--Zobrazíme text komentáře-->
            '
.$comment['komentar'].'
        </div>
<!--Pokud zmačkneme na tento odkaz, pak se do skrýteho pole s názvem parent_id přidá
identifikátor tohoto komentáře. 
Použil jsem zde JS událost onClick, tzn. pokud je tlačítko zmačknuté, pak najdi prvek s 
id parent ( což je skrýte pole parent_id ) a do hodnoty přidej id komentáře, na který chcete odpovědět-->
        <a class="replay" href="javascript:;"
        onClick="document.getElementById(\'parent\').value='
.$comment['id'].';">Odpovědět</a>
    </div>
</li>'
;
?>

comment.js

Tento soubor je určen pro odesílaní dat na server a přidávání do databáze

$(document).ready(function(){
    
// Objekt commentBox bude obsahovat data pro odesílání na server
    
var commentBox = {};
    
// Po kliknutí na tlačítko přidat      
     
$('#commentBox button').live('click',function(){
         
// Do objektu commentBox bude přidána hodnota skrýteho pole input s názvem parent_id,
// které obsahuje id rodičovského komentáře a pokud je prázdné tak bude 0, což znamená, že
// se jedná o nový komentář bez reakci na něj ( toto se bude ověřovat až odešleme data na server ).   
        
commentBox.parent_id = $('#commentBox').find("input[name='parent_id']").val();
        
// Taktéž přidáme do objektu commentBox hodnotu pole name a zprávu
        
commentBox.name = $('#commentBox').find("input[name='name']").val();        
        
commentBox.text = $('#commentBox').find("textarea").val();
// Abyste to lépe pochopili syntaxe toho, jak přidáváme hodnoty do objektu je:
// Objekt.název_proměnné = hledáme input nebo textarea.hodnota pole

// Funkce pro odesílání dat na server        
        
sendData();
     });
    

function 
sendData()
{
// Najdeme tlačítko schováme jej a zobrazíme loader ( ten si můžete stáhnout z archivu )
    
$('#commentBox').find('button').hide().next().show();

// Odešleme    data metodou post na server
    
$.post(
// Soubor, ve kterém se provádí ověřování dat a přidávání komentářů     
        
"addkoment.php",
// Objekt s proměnnými (parent_id, name a text)
        
commentBox,
        function(
data){
// Pokud jsou nějaka data, to znamená, že nastala chyba
            
if(data)
            {
// Převedeme tento řetězec JSON do objektu JS
                
data = $.parseJSON(data);
                
// Vytvoříme proměnnou errors, která bude obsahovat název chyby
                
var errors '';

// Použijeme cyklus pro zobrazení všech chyb najednou.
// Použil jsem tuto konstrukci, protože nejprvé jsem zobrazoval všechny chyby, ale
// nakonec jsem to změnil a teď se bude zobrazovat jenom jedna konkretní chyba     
// Kdybyste chtěli zobrazit všechny chyby tak použijte konstrukci
// errors += val+'\n'; - každá chyba se zobrazí na samostatném řádku.
// i - obsahuje název chybného pole a val - popis chyby
            
                
$.each(data, function(ival)
                {
                    
errors += i;
                });

// Uložil jsem do proměnné errors jenom název chybného pole a
// cyklusem switch procházim všechny varianty a přidávam červený rámeček 
// pokud pole je prázdné nebo jestli komentář nebyl přidan tak zobrazim hlášení                    
                   
switch (errors
                   {
                      case 
'name':
                        $(
'#commentBox').find("input[name='name']").css('border','2px solid red');
                        break
                      case 
'text':
                        $(
'#commentBox').find("textarea").css('border','2px solid red');
                        break
                      case 
'not_add':
                        
alert('Komentář nebyl přidan.')
                        break
                      default:
                        
alert('Něco je špatně')
                  }

// Najdeme loader ( ten si můžete stáhnout z archivu ) schováme jej a zobrazíme tlačítko přidat     
                
$('#commentBox').find('button').show().next().hide();

// Jinak, pokud žadná chyba nenastala, tak voláme funkci addComment, která zobrazí
// komentář bez znovunačtení stránky a vynuluje hodnoty vstupních poli
            
} else {
                
addComment();        
            }
        }
    
    )

}


function 
addComment()
{
// Na konec prvků s id commentWrapper ( což je ul ) přidame tag <li></li>,
// ve kterém se bude nacházet nový komentář
    
$("#commentWrapper").append('<li></li>');

// Najdeme poslední tag <li>, který jsme teď vytvořili a
// načteme do něj poslední komentář
    
$("#commentWrapper li:last").load('new_comment.php');
// Najdeme loader ( ten si můžete stáhnout z archivu ) schováme jej a zobrazíme tlačítko přidat     
    
$('#commentBox').find('button').show().next().hide();

// Vynulujeme hodnoty vstupních poli
    
$('#commentBox input').val('');
    $(
'#commentBox textarea').val('');

}


});

addkoment.php

Tento skript zpracovává data poslána na server pro zpracování.

<?php
// Ověříme, zda se jedna o odeslána POST data nebo si člověk jen tak otevřel tuto stránku
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {

// Pokud ano, pomocí funkci sleep přidame efekt zpoždění, abyste 
// viděl loader, jinak, protože pracujeme na lokálním serveru
// se ten loader hned schová  
     
sleep(2);

// Ověříme vstupní data     
// Pokud je pole name nebo textové pole prázdné do pole $error uložíme text chyby
// ukončíme skript a odešleme tuto chybu v JSON formátu  
     
if(!isset($_POST['name']) OR empty($_POST['name']))
     {
        
$error['name'] = "Zadejte jméno.";
        exit(
json_encode($error));
     } else {
        
$name htmlspecialchars(stripslashes(trim($_POST['name'])));
     }
     
     if(!isset(
$_POST['text']) OR empty($_POST['text']))
     {
        
$error['text'] = "Zadejte zprávu.";
        exit(
json_encode($error));
     } else {
        
$text stripslashes(htmlspecialchars(trim($_POST['text'])));
     }
     
// V tomto případě, když parent_id je prázdné pole tak mu přiřadime hodnotu 0
// to znamená, že se jedná o nový komentář, který není odpovědí na něčí jiný  
     
if(!isset($_POST['parent_id']) OR empty($_POST['parent_id']))
     {
        
$parent_id 0;
     } else {
        
$parent_id stripslashes(htmlspecialchars(trim($_POST['parent_id'])));
     }
     
// Vložíme soubor s připojením k databázi. ( musí se nacházet ve stejné složce )  
     
require_once 'db.php';
     
// Přidame komentář do databáze a vrátíme false, tzn.
// že chyba nenastala a komentář byl přidán.
     
$q mysql_query("
     INSERT INTO `comments`(`parent_id`,`name`,`komentar`,`date`)
     VALUES('"
.$parent_id."','".$name."','".$text."', NOW())
     "
);
     if(!
$q) { $error['not_add'] = "Komentář nebyl přidan."; exit(json_encode($error));}
     else { exit(
false); }

}
?>

new_comment.php

V tomto souboru vybírame poslední komentář, abysme ho následně zobrazili po úspěšnem ověření vstupních dat.

<?php
// Vložíme soubor s připojením k databázi. ( musí se nacházet ve stejné složce ) 
require_once 'db.php';
// Vybereme maximální ( poslední přidáný ) id
$max mysql_query("SELECT MAX(`id`) FROM `comments_my`");
// Pak vybereme všechny související údaje s tímto identifikátorem
$query mysql_query("
         SELECT `parent_id`,`name`,`komentar`, 
         DATE_FORMAT(date, '%d %M %Y %H:%i') as date_add
         FROM `comments_my` WHERE `id` = '"
.mysql_result($max,0)."'
         "
);
$comment mysql_fetch_assoc($query);

// A stejně, jak jsme zobrazovali komentáře před tím, zobrazíme poslední přidáný
echo '<li id="comment'.mysql_result($max,0).'">
    <div id="commentWrap">'
;
        
        if(
$comment['parent_id']!=0)
        {
            
$q mysql_query("SELECT `name`, DATE_FORMAT(date, '%d %M %Y %H:%i') as date_add FROM `comments_my` WHERE `id`='".$comment['parent_id']."'");
            
$r mysql_fetch_assoc($q);
            echo 
'<span class="repText">Odpověď na komentář</span> <span class="repName">
            '
.$r['name'].'
            </span> <span class="repText">from</span> <span class="repDate">
            '
.$r['date_add'].'
            </span><br>'
;
        }
        
echo    
'<span class="commentName">'.$comment['name'].'</span> - <span class="commentDate">'.$comment['date_add'].'</span>
        <div class="komentar">
            '
.$comment['komentar'].'
        </div>
        <a class="replay" href="javascript:;"
        onClick="document.getElementById(\'parent\').value='
.mysql_result($max,0).';">Odpovědět</a>
    </div>
</li>'
;
?>

Závěr

Probrali jsme, jak můžeme zpracovávát formuláře bez znovunačtení stránky. Doufám, že se Vám tento článek líbil a byl pro Vás přínosný.

Systém Orphus
Napište komentář.
Celkem komenrářů(9084)
Walterver - 2017-04-07  17:57:38
 Тогда дозволено подкупать качественную мебель для дома и офиса. Доставка бесплатная, оплата по факту получения! Выбирайте на официальном сайте МЮ мебель в любом цветовом исполнении, широкой комплектации.
Заказывайте для официальном сайте, непосредственно сейчас: http://mebel-mu.ru
Поминутно сотни заказов.
Вовремя всем советую – цены реально хорошие.
Я уже покупал в этом магазине ложе и ящик печать супер.
CaseyEngaw - 2017-04-07  12:25:55
 Недостаточно заботиться о здоровье родного ребенка - необходимо делать решительные действия для его защиты. Причем доверить данный вопрос нужно только лишь опытным проверенным педиатрам.
На сегодняшний день консультации индивидуального педиатра по карману далеко не многим жителям РФ. А отправляться по всякому вопросу в поликлинику, выстаивать долгие очереди и подвергать чадо вероятности заразиться вирусами от других детей - тоже не вариант.
К счастью, многие частные клиники дают оформить программу Детского Добровольного Медицинского Обслуживания (ДМО), которая помогает за несущественную сумму приобрести полис на годовое обслуживание у педиатров.
К сожалению, не многие осведомлены о такой услуге и не перестают лечиться народными методами, выжидают длительное время в очередях и отдают большие деньги за посещения частных педиатров.
А программа Добровольного Медицинского Обслуживания для детей позволяет:
" Бесплатно получить больничный лист по уходу за ребенком;
" Бесплатно проходить обследование у личных врачей педиатров;
" Бесплатно или со скидкой осуществлять лечебные процедуры и диагностические процедуры;
" Лечить чадо сразу, качественно и без очередей.
Для того чтобы ознакомиться со списком клиник и условиями предоставления лечения достаточно вбить в поиск Яндекса или Google фразу: "Добровольное Медицинское Обслуживание". После этого надо подобрать приглянувшуюся клинику и оформить договор.

34j5c6h87
IsmaelFunny - 2017-04-07  09:27:42
 Новая информация об автомобилях [url=http://autoisauto.ru/]autoisauto.ru/[/url]
DanielKic - 2017-04-07  08:58:37
 [url=http://filmsfile.ru/]Фильмфайл ру![/url] лучшие файлы фильмов фильмы, игры, софт, музыка, торрент, бесплатно
WilliamBearf - 2017-04-07  08:34:11
 Lamiderm in hollywood. Lamiderm apex jn american health jou
al 2017
Такой сыворотки для кожи до сего момента не было в мире!
Lamiderm apex, a brand new exclusive skin care formula, apex goes beyond the skin’s surface to repair,apex goes beyond the skin’s surface to repair, rejuvenate and restore at the core of the problem.

Lamiderm Apex targets the main fibers of the skin rejuvenate your skin
PatrickMof - 2017-04-07  08:29:43
 [URL=http://meendo.lipoly.ru][IMG]http://meendo.lipoly.ru/4f8324dcbfb4d.gif[/IMG][/URL]
Robertkayap - 2017-04-07  06:04:59
 Последние новости здесь [url=http://mybiysk.ru/]mybiysk.ru/[/url]
Препараты улучшающие потенцию у мужчин 203 - 2017-04-07  03:00:22
 Препараты улучшающие потенцию у мужчин sialisedpomosch.cu.cc
Купить Виагру после интернет-аптеку значительно проще и удобнее китайские дженерик виагра софт купить. Во-первых, на сайте Вы ввек найдете изображение препаратов, подробную инструкцию к применению, а также, сколько немаловажно, отзывы покупателей. Во-вторых, валюта в интернет-аптеке практически издревле ниже, чем в обычных аптеках. И, в-третьих, Вы можете обещать интересующий произведение, например таблетки, в удобное для Вас место.
Louismug - 2017-04-07  01:50:01
 [url=http://u.to/YinVDw][img]http://sc-cdn.scaleengine.net/i/a2ddc803d773fd978488f6d27bbe165c.jpg[/img][/url]

Смотри тут [b]Смотреть онлайн Ниндзяго: Мастера Кружитцу 6 сезон 10 серия [/b].
Телезрителей ждут новые невероятные приключения любимых героев Коляна и Леры, Игоря Сергеевича и Базанова.Их пермский акцент известен еще с первых сезонов фильма.Рекомендую [b]Свидетельство о рождении (2017) смотреть сериал онлайн [/b]После долгих разбирательств, Коля просит Ознобихина закрыть дело, чтобы не портить статистику, ведь проходит конкурс на лучший район города.

Семья Коляна уже трещит по швам .Прошло семь лет с показа первых серий сериала Реальные пацаны и ТНТ вновь идёт на отчаянный эксперимент, заключая с правоохранительными органами Перми новое соглашение.Игроки занимали последнее место в таблице Молодежной лиги.Советую [b]Дом-2 06/04/2017 Лайт смотреть онлайн [/b]С появлением новых коллег по команде возникает благоприятная почва для соперничества, выяснения отношений.Маша перебралась к Фитилю.Он задевает настолько глубоко, душа откликается, хочется стать честнее, справедливее, как герои сериала.04, 00 16 Мать из Саратовской области неделю хранила труп сына в морозильнике 05.

Коля не теряется и решает попробовать себя в сфере услуг.Реальные пацаны новый 10 сезон 17 серия Дружба за деньги 06 04 2017 .Однажды он отправляется на очередные заработки и при попытке украсть канализационный люк, его задерживает участковый.С нашим сайтом все зрители смогут без каких-либо проблем и проволочек смотреть nbsp Реальные пацаны 10 сезон 15 серия смотреть онлайн на Киного.В это время в жизни Коляна возникает новая проблема он должен сделать выбор между двумя девушками.Могу предложить [b]Молодёжка 4 сезон 45 серия 46 серия (10.04.2017) смотреть онлайн [/b]Момент из 3 сезона Молодежки.Реальные пацаны актеры и роли.Помимо этого ему удалось наладить личную жизнь и завести собственную любящую семью.

Единичная победа, даже на крупном турнире, в рамках всей спортивной карьеры мало чего значит.Смотрите фильм [b]Сериал Следствие любви 7,8 серия (06.04.2017) [/b]Волчонок 6 сезон 11, 12 серия.Парень должен будет снимать несколько месяцев своей жизни на камеру.
Titvdop - 2017-04-07  00:49:25
 Гарантированное лечение алопеции (alopecia areata) - всех форм и тотального облысения.
[url=http://облысение-алопеция.рф]Записаться на консультация[/url] можно на сайте - облысение-алопеция.рф
Без гормонов, методике более 30 лет.
Stevenslolo - 2017-04-06  23:42:05
 [url=http://afinaland.ru/]стоимость ландшафтных работ[/url] - вертикальное озеленение, ландшафтный дизайн частного дома.
Robertdut - 2017-04-06  23:42:04
 [url=http://orexmet.ru/latun]латунный пруток[/url] - бронзовый пруток браж, проволока медная мм.
Catseliftaddeni - 2017-04-06  20:37:19
 РџСЂРёРєРѕР»С‹
https://www.youtube.com/watch?v=-YiHOOcA0C8

веселые кошки,
cats
котенок
funny
Catseliftaddeni - 2017-04-06  20:36:58
 РџСЂРёРєРѕР»С‹
https://www.youtube.com/watch?v=-YiHOOcA0C8

веселые кошки,
cats
котенок
funny
Lstrguiffic - 2017-04-06  20:00:27
 Thank you read in one breath

[url=http://scootneworleans.com/forum/viewtopic.php?f=3&t=689156] And you wrote this article for a long time?
[/url]

http://163.15.202.98/FOP/QQ/QQ_14/modules/newbb/newtopic.php?forum=2
Williambiz - 2017-04-06  17:30:07
 Последние новости в мире на [url=http://s-narodom.ru]s-narodom.ru[/url]
Jamesgop - 2017-04-06  15:35:21
 Hi Apolo!

Touch Screen Phones: Up to 60% OFF and Low to $20.99 La synchronisation avec votre ordinateur.
Of course this is just another indication of how me-centered our society has become. oneplus 3 usb c 3 amp charger
[url=http://kilamo.info/xiaomi-redmi-2-x-moto-g/]xiaomi redmi 2 x moto g[/url] hotspot on zte android
As technology changes, so do the functions that these different devices perform.
The rim blackberry 8800 is considered a smartphone — but its borderline on being a handheld pc device due to its size and features .

Tags:
zuk z salon louis
zte axon a1 youtube
[url=http://kilamo.info/zenfone-pegasus-3-kittens/]zenfone pegasus 3 kittens[/url]
aeku m5 nano nano
cubot p wave vector
doogee x9 pro death
[url=http://kilamo.info/bluboo-picasso-4g-7-tablet/]bluboo picasso 4g 7 tablet[/url]
bluboo x han 251
blackberry q5 sqr100 2
xiaomi redmi note 4x movies
[url=http://kilamo.info/meizu-u-731-732/]meizu u 731 732[/url]
cubot p logo 690
xiaomi redmi note 3 32gb gold ankle
bluboo picasso 4g qualcomm
zuk z2 plus or minus
[url=http://kilamo.info/bluboo-x-men-victor/]bluboo x men victor[/url]
phone deals best buy
doogee x7 pro nfl
note 8 charging port
[url=http://kilamo.info/aeku-m5-logo-history/]aeku m5 logo history[/url]
doogee x9 pro camera
cubot p ring year 300
doogee y6 igrice
[url=http://kilamo.info/tips-n-trik-asus-zenfone-5/]tips n trik asus zenfone 5[/url]
inew qalster my singing monsters
huawei ascend p 511
In an ostensibly flat world, we may want to re-examine our assumptions regarding the always on (7x24) demands that we impose in offshore and nearshore teams.
Ggle is paying 97$ per hour! Work for few hours and have longer with friends family! !Mj319d: on tuesday i got a great new land rover range rover from having ea
ed $8752 this last four wks.
Galinaeluro - 2017-04-06  14:48:57
 [url=http://cilaiscialiscostgenericonline.us]for[/url]
ClaudeFit - 2017-04-06  08:36:59
 Баскетбол — Спортивный портал-Все о спорте [url=http://kmfv.rv.ua/category/%D0%B1%D0%B0%D1%81%D0%BA%D0%B5%D1%82%D0%B1%D0%BE%D0%BB/]Баскетбол — Спортивный портал-Все о спорте![/url]
JanicePtvf75 - 2017-04-06  07:39:41
 [b]Famous brand large bifold travel wallets passport bag genuine real leather wallet credit id card slots coin pouch purse ( 16.67 $)[/b]
[url=http://projectgold.ru/ad11aliexp2/famous_brand_large_bifold_travel_wallets_passport_oo.html][img]http://projectgold.ru/ad11aliexp2/image/famous_brand_large_bifold_travel_wallets_passport_oo.jpg[/img][/url]
[i]famous brand large bifold travel wallets passport bag genuine real leather wallet credit id card slots coin pouch purse... Item Type: Wallet ; Brand Name: qianxilu ; Interior: Interior Slot Pocket,Interior Zipper Pocket,Interior Compartment,Coin Pocket,Passcard Pocket,Note Compartment,Photo Holder,Card Holder ; Closure Type: Hasp ; Item Width: 10cm...[/i]
[url=http://projectgold.ru/ad11aliexp2/famous_brand_large_bifold_travel_wallets_passport_oo.html][img]http://i67.tinypic.com/2hs46dw.png[/img][/url]


[b]READ MORE[/b]
KT0046 Resisters + Potentiometer Set ( $5.29 )
[url=http://projectgold.ru/tsebraeg/magnetic_levitation_floating_globe_world_map-64.19rt.html]Magnetic Levitation Floating Globe World Map-64.19 $[/url]
[url=http://projectgold.ru/forzieri/Falcon_Chrono_Mens_Watch_wRubber_Strap0M.html]Falcon Chrono Mens Watch wRubber Strap ( 168.00 $)[/url]
[url=http://projectgold.ru/gearbestles/zoyo_car_module_puzzle.html]ZOYO Car Module Puzzle ( $4.53 )[/url]
Vicki Leather Mini Bucket Bag wTassels ( 126.00 $)
Sleek deep curly human hair wigs for black women, 100% brazilian curly virgin hair, 11 ( 56.44 $)
Black Bangle Bracelet ( 181.30 $)
[url=http://projectgold.ru/tsebraeg/umi_rome_x_3g_phablet-81.67_ih.html]UMI ROME X 3G Phablet-81.67 $[/url]
Marrant genuine leather bag men bags fashion male messenger bag men s briefcase man casual crossbody ( 73.00 $)
Plus size v-neck pu leather spliced floral print men's short sleeves t-shirt ( 16.21 $)
[url=http://projectgold.ru/forzieri/Knot_Gold_Plated_Cuff_Links42.html]Knot Gold Plated Cuff Links ( 41.44 $)[/url]
7 inch touch monitor video intercom door phone doorbell 900tvl hd camera ir night vision wired door bell phone ( 128.34 $)
[url=http://projectgold.ru/ireizrof/british_wool_mens_beanie_hatfp.html]British wool mens beanie hat ( 59.91 $) Paul Smith[/url]
[url=http://projectgold.ru/sserpxeila1/1x_Car_led_HB4_9006_33_LED_5630_SMD_White_Car_AutoUs.html]1x Car led HB4 9006 33 LED 5630 SMD White Car Auto Light Source Fog DRL Daytime Running Driving Lamp Bulb Daytime Running Light ( 3.99 $)[/url]
Mini bertoncina black and white bowler bag ( 571.32 $) Bertoni 1949


[url=http://projectgold.ru/adsserpxeila.htm][img]http://projectgold.ru/img/adaliimg_e/89.jpg[/img][/url]
<<[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] [94] [95] [96] [97] [98] [99] [100] [101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120] [121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140] [141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153] [154] [155] [156] [157] [158] [159] [160] [161] [162] [163] [164] [165] [166] [167] [168] [169] [170] [171] [172] [173] [174] [175] [176] [177] [178] [179] [180] [181] [182] [183] [184] [185] [186] [187] [188] [189] [190] [191] [192] [193] [194] [195] [196] [197] [198] [199] [200] [201] [202] [203] [204] [205] [206] [207] [208] [209] [210] [211] [212] [213] [214] [215] [216] [217] [218] [219] [220] [221] [222] [223] [224] [225] [226] [227] [228] [229] [230] [231] [232] [233] [234] [235] [236] [237] [238] [239] [240] [241] [242] [243] [244] [245] [246] [247] [248] [249] [250] [251] [252] [253] [254] [255] [256] [257] [258] [259] [260] [261] [262] [263] [264] [265] [266] [267] [268] [269] [270] [271] [272] [273] [274] [275] [276] [277] [278] [279] [280] [281] [282] [283] [284] [285] [286] [287] [288] [289] [290] [291] [292] [293] [294] [295] [296] [297] [298] [299] [300] [301] [302] [303] [304] [305] [306] [307] [308] [309] [310] [311] [312] [313] [314] [315] [316] [317] [318] [319] [320] [321] [322] [323] [324] [325] [326] [327] [328] [329] [330] [331] [332] [333] [334] [335] [336] [337] [338] [339] [340] [341] [342] [343] [344] [345] [346] [347] [348] [349] [350] [351] [352] [353] [354] [355] [356] [357] [358] [359] [360] [361] [362] [363] [364] [365] [366] [367] [368] [369] [370] [371] [372] [373] [374] [375] [376] [377] [378] [379] [380] [381] [382] [383] [384] [385] [386] [387] [388] [389] [390] [391] [392] [393] [394] [395] [396] [397] [398] [399] [400] [401] [402] [403] [404] [405] [406] [407] [408] [409] [410] [411] [412] [413] [414] [415] [416] [417] [418] [419] [420] [421] [422] [423] [424] [425] [426] [427] [428] [429] [430] [431] [432] [433] [434] [435] [436] [437] [438] [439] [440] [441] [442] [443] [444] [445] [446] [447] [448] [449] [450] [451] [452] [453] [454] [455] >>
*v komentářich nesmíte používat sprostá slova a odkazy!!!Děkuji za pochopeni.