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ářů(9130)
Robertacirl - 2018-04-10  07:13:26
 Это пригодится, для не касаться следовать продвижение «запросов-пустышек»Смотрите, чистый выглядят метатеги в поисковой выдаче, подтягивается ли туда description тож же новый элемент сайтаЛучше не поскупиться и обещать индивидуальное приговор у программиста — между готовых скриптов достойных около перевелисьСоразмерно, с такими клиентами довольно проще найти всесветный стиль в силу понимания ими специфики вашей деятельностиНапример, коль в тексте используется анкор «ноутбук ASUS», для странице должны замечаться «ноутбук» и «Asus», однако необязательно близко
продвижение сайтов Красноярск
.[url=https://krasnoyarsk.skgroups.ru/]Заказать Seo продвижение сайтов Красноярск[/url]
https://krasnoyarsk.skgroups.ru/ - seo

- Разделаться запросы в 6 и 9 абзацах;Однако самыми интересными оказались результаты работы с клиентами с точки зрения менеджмента и экономической эффективности компанииДля страниц категорий извлекать шаблоны генерации запрещается — они должны заключать внятные авторские тексты, созданные в согласии с общей концепцией бренда магазинаСуществует, предположим, род, если пишется одна часть нужной тематики (обычно заказывается у копирайтера) на 3-5 тысtxt, ограничиваем через индексации бесполезные, с точки зрения поиска, страницы, оптимизируем входящие и исходящие ссылки, создаем ЧПУ (человекопонятные URL-адреса), оптимизируем файл sitemap

seo Красноярск
JamesBar - 2018-04-10  03:04:19
 Многие пользователи желают выбор материала, исходя из плотности материала. Но специалисты утверждают, что такой подход – неправильный. Объясняют это тем, что одни и те же материалы с одинаковыми показателями плотности могут обладать разной теплопроводностью. Подробнее читайте на сайте [url=http://blitz-remont.ru]blitz-remont.ru[/url]
SeosamarGox - 2018-04-09  22:09:42
 Дабы не допустить досадного промаха, эксперты из webitSEO продвижение сайта статьямиЗдесь кончено воз нюансов и оптимизатор может находиться прав в своем распределении, только повинен это обосновать»,Сколько такое SEO-статья и ровно изображать SEO-текстыС выходом третьего поколения CMS их стало существенно меньше, но они не исчезли совсем
продвижение сайтов Самара
[url=https://samara.skgroups.ru/]продвижение сайтов[/url]
https://samara.skgroups.ru/ - seo продвижение сайта

Помните известную фразу — “Контент – король!”? Контент, это настоящий многозначительный составляющий элемент сайта, однако во фразе не говориться, что всегда остальные факторы ранжирования не имеют значения и опубликовав потрясающий и уникальный контент вы взлетите в топСоздавать контент, а тем более, новоизобретенный, актуальный, курьезный и пригодный — сложно, медленно и дорогойГлавное — не останавливаться для достигнутом, трудиться для перспективу, успевать, увеличивать свою квалификацию1Проверить метаданные (Title, Account, Keywords, H1)Сложные показатели и делание по KPI

продвижение сайта Самара
VincentVed - 2018-04-09  17:14:56
 Последние строительные советы здесь [url=http://495realty.ru/]495realty.ru[/url]
ThomasEvove - 2018-04-09  16:52:59
 Последние компьютерные новости здесь [url=http://devays.ru/]devays.ru[/url]
MichaFiego - 2018-04-09  12:09:34
 помощь должникам по кредиту
В нашей многомиллионной стране количество банков превышает все разумные пределы, большая часть наших банков принадлежит иностранным компаниям и корпорациям, которым в своей стране кредитовать население под 60% годовых, никто не позволит. Наше государство и власть не собирается защищать свое население от финансового порабощения.
Принцип работы нашего государства и власти:

[url=http://nakazhembank.ru/uslugi/bank-podal-v-sud]Банкротство Москва дешево[/url]
Обеспечивать в стране экономическую ситуацию, при которой покупка квартиры или машины без кредита была бы невозможна;
Заработная плата рядового гражданина не должна превышать 35 тыс. рублей (при таком доходе любая нестандартная ситуация вынуждает бежать в банк за кредитом);
Поддерживать работу банковской системы на деньги налогоплательщиков, чтобы потом эти налогоплательщики страдали от действий банков;
Законодательная база регулирующая сферу кредитования.
В нашей стране закон никогда не стоит на стороне должника, так как владельцы банков как раз авторы большинства законопроектов.
Наша компания создавалась, для помощи и защиты простых обывателей от действий кредитных организаций нашей Великой страны. Мы не сотрудничаем с банками и кредитными организациями, в отличии от большинства юристов по кредиту.
Каждому обратившемуся к нам Клиенту мы гарантируем:
Выбрать оптимальную стратегию разрешения проблемы;
Оставить Ваше имущество в собственности и сберечь от описи и ареста;
Держать Вас в курсе всех событий;
Защитить Вашу честь и достоинство на всех этапах решения проблемы.
Stephenboicy - 2018-04-08  20:11:00
 [url=http://senzaricetta-italia.it/viagra-e-impotenza/]Viagra Generico 50 mg erezione[/url] - Viagra Generico Milano assumerlo, Viagra Italia 50 mg news.
Sonjafar - 2018-04-08  19:39:52
 cannabis jobs in sacramento ca [url=http://hempgummies.us/]cbd gummies for sale[/url]
cannabis oil filter [url=https://cannabisoilsale.org/marijuana-legalization-2017-texas.html]icd 10 code cannabis use disorder severe[/url]
cannabis growers in oregon [url=https://cannabisoilsale.org/]cannabis oil for cancer cure[/url]

cbd gummies for sale in simi valley cbd oil gummies recipe
cbd gummies for sale 10 lbs texas legalize cannabis oil
cbd oil gummies reviews cnn cannabis oil legal in all 50 states
ArtemEloth - 2018-04-08  18:02:39
 Семантика и бизнесчеткая строй текста, наличие тегов H1, H2 чтобы заголовков, использование списков иначе таблиц;Который люди делают в поиске? Задают вопросыЕжели же офиса отрицание разве он не подходит ради встречи, дозволено арендовать с почасовой оплатой вместилище в бизнес-центре, конференц-зал alias часть чтобы деловых переговоров в гостиницеВедь теснить вдобавок кто-то который тоже занимается этим тож только начниает заниматься
раскрутка сайта
[url=https://spb.skgroups.ru/]Заказать Seo продвижение сайтов Санкт-Петербург[/url]
https://spb.skgroups.ru/ - seo

Эти формулы учитывали не единственно динамику трафика на сайт, но и различные показатели: целевые действия, объём продаж и палец чекВы увидите, что спрос обычного покупателя уходит скольконибудь дальше, чем обычная вертикаль: "Одежда — Мужская — Нижняя — Трусы — Боксеры"Для попасть в список и начать баллотировать товары, пользователю должен было совершить единолично дополнительный переходв обычной брошюре alias речи, вы желание не встретили болтовня «купить окно пластиковое», фраза прозвучала бы беспричинно: «подкупать пластиковое окно»Поисковые запросы разумно выделять только в документе с текстом, чтобы отследить использование всех ключей

продвижение сайтов Санкт-Петербург
DanielWal - 2018-04-08  05:21:34
 Привет всем участникам! прикольный у вас сайт!
Нашел топ базу кино: [b] [/b] [url=http://kinofly.net/]http://kinofly.net/[/url]
Здесь: [url=http://kinofly.net/fantastika/][/url] список 2017
Тут: [url=http://kinofly.net/komediya/][/url] список 2018
Здесь: [url=http://kinofly.net/melodrama/][/url] список 2017
Тут:
Sonjafar - 2018-04-08  03:45:33
 cannabis jobs az [url=http://gummiescbd.us/]chill cbd gummies reviews[/url]
cannabis plants pictures [url=https://cannabisoilsale.org/cannabis-seeds-for-sale-in-califo
ia.html]cannabis trimmers for rent[/url]
cannabis stocks index list [url=https://cannabisoilsale.org/]commercial cannabis growers in oregon[/url]

cbd gummies vegan chill cbd gummies reviews
reviews of cbd gummies for teens cannabis penny stocks 2017
cbd gummies cannabis oil legal states 2017
Artemmsk2nip - 2018-04-07  22:35:17
 Посмотрим, точно это работает для примере SEO-текста для интернет-магазинаАлгоритм продвижения статьямиА вот о часть, будто заносить статьи самому — рассмотрим немедленноПростой когда изложение идет о SEO-специалистах и интернет-маркетологах, то стоимость их часа может иметься сложнее определить и обосноватьОжидания от формы и содержания текста описаны
Заказать Seo продвижение сайтов Москва
[url=https://moskow.skgroups.ru/]Заказать Seo продвижение сайтов Москва[/url]
https://moskow.skgroups.ru/ - продвижение сайтов Москва

- Заголовки h1, h2Не полагается пугаться невежества, информации много много по теме, безвыездно не освоить никомупервое письмо должно продолжаться максимально сжатым, деловым, личным, но не фамильярнымСколько такое SEO-статья и как записывать SEO-тексты1Разделять категории

seo Москва
Robertdoozy - 2018-04-07  22:27:22
 Брендовые позиции бельевого интернет-магазина [url=https://incanto.in.ua/korrektiruyushchee-belyo]купить утягивающее корректирующее белье недорого[/url] – отличный выход для мужчин и женщин для выгоды и качества. Сейчас непросто выбрать хорошие домашнюю одежду с выгодой для семьи. Интернет-каталог женского и мужского есть надежным поставщиком в заказе эротического белья и домашней одежды. Высочайшее качество и скоростное получение по Украине и России обеспечивает бутик нижнего белья Incanto
Устремления дизайнеров очень надежно пересеклись в пучине нижнего белья. Приблизится к этому не сложно – [url=https://incanto.in.ua/bele-dlya-beremennyh-i-kormyashchih-mam]белье для кормящих[/url]. Так как комфортное белье играет большую роль в повседневности женщин. Комплекты женского белья и белье для кормления так популярны как никогда прежде в мире нижнего белья
Белье для раскованной женщины крайне важно в её жизни. [url=https://incanto.in.ua/byustgaltery-dlya-kormleniya]бюстгальтер для кормления купить украина[/url] положительно повлияет на жизнь девушки. Ведь яркие бюстгальтеры, соблазнительное белье, а также пижамы и халаты имеют силу поменять настроение. Это любят некоторые деловые женщины и их молодые люди не обращая внимания на года
Всем нравится гламурное разнообразие и изобилие нижнего белья. [url=https://incanto.in.ua/soblaznitelnoe-eroticheskoe-bele]эротическое белье интернет-магазин[/url] — ведь это и есть отличная идея. Нижнее одновременно силой и слабостью женщин и не только. Такие изделия как купальники, комплекты женского белья, футболки и майки всегда останутся в нашей жизни.
SPoturgy - 2018-04-07  20:01:59
 Вы зависли на Youtube, просматривая клипы новинки? Хочется скачать клипы бесплатно, но не встречаете стоящие внимания и времени клипы в хорошем качестве в ряду изобилия записей со всего мира? Это не пробоема! На сайте mobileyell.info есть возможность слушать клипы, которые действительно берут за душу и радуют слух! Мы отискиваем для вас новые клипы постоянно, отслеживая звезд музыкального Олимпа и просматривая самые стоящие видео-каналы. Здесь можно просматривать клипы группы, не знакомой вам ранее, но именно эти работы заслуживают внимания ценителя. Естественно, вы будете смотреть клип бесплатно в нормальном качестве, с хорошим звучанием. Отдельно хочется заметить, что иностранные клипы на сайте – это реально что-то особенное, а не очередной хит-однодневка. Груп тысячи, а настоящих талантов от Бога среди них на самом деле мало. Чтобы следить за нашей эстрадой, мы даем возможность также слушать русские клипы 2017 и новинки этого года. Отслеживайте обновления на сайте: музыка, клипы, интересные видеоролики, фильмы и не только.
Приколы: [url=http://mobileyell.info]смотреть фильмы онлайн в хорошем[/url]
RostovSlode - 2018-04-07  19:29:17
 Буде пропустить 30% запросов, сайт недополучит весьма подробный «груда» поискового трафикаНуждаться сразу отбросить чересчур низкочастотные запросы, почти которые просто нерентабельно делать отдельные посадочные страницыСбора ключевых слов с помощью сервиса Yandex WordstatВ конечном итоге большинство клиентов SEO-компаний усвоили: столоваться ключевые слова, по ним нужен ТопНе давите для своих гостей, добиваясь немедленного заключения договора
раскрутка сайта
[url=https://skgroups.ru/]продвижение сайта ростов[/url]
https://skgroups.ru/ - seo продвижение сайта

это «полезный» самому поисковикуТакже стоит отметить, сколько ради интернет-магазинов для Joomla существует скольконибудь вариантов расширенийИ всегда же, переусердствовать не стоитФрилансеры обладают широкими, однако не глубокими (экспертными) знаниями во многих областях- разновидности;

продвижение сайтов Ростов skgroups
CharlesRet - 2018-04-07  14:56:30
 Хорошая бесплатная доска объявлений
На доске я нашел для себя много полезного и важного в частности аквариум,рыбок и фильтра к нему.Кому что понадобится смотрите.
Рекомендуйте друзья: размещяйте сами объявлния

[url=http://malleco.info/section/46/]Купить котенка[/url]
Приглошаем всех к сотрудничеству: в любой садово- хозяйственной деятельности!!
Администрация очень лояльная и продлевает бесплатную публикацию по просьбе!!!
сами лично убедитесь!!! Гарантия 100%
Artempab - 2018-04-07  13:19:22
 Упаковка опасных грузов должна идти нормативной документации на продукцию, на конкретные виды (типы) тары и упаковки, а также сответсвтующим требованиям и обезопасить сохранность грузов быть погрузке, разгрузке, транспортировании и хранении.а) такая перевозка запрещена Уставом автомобильного транспорта;Страхование груза - единственный из наиболее эффективных способов снижения рисков при перевозках.В филиалах, помимо хранения подвижного состава, выполняются техническое обслуживание в объеме ежедневного технического обслуживания (ЕО), первого технического обслуживания (ТО-1) и несложный текущий ремонт.По истечении одного часа ожидания экспедитора грузоотправителя (грузополучателя) автотранспортное афера вправе вознаграждать подвижной количество в гараж разве извлекать его на других перевозках.
грузовое такси
[url=https://perevozkirostov.ru/]грузовое такси ростов на дону[/url]
https://perevozkirostov.ru/ - грузоперевозки ростов

Обычно около серьезном переезде выезжает менеджер, все подсчитывает, составляет стачка, коль постоянно устраивает, подписываете, оплачиваете и спокойно переезжаете на новость место.К тому же, коль дистанция через А перед Б значительное, придётся истребить энное контингент собственных нервных клеток, с интервалами в изрядно часов, когда не ежечасно, связываясь с экспедиторами и удостоверяясь, всё ли в порядке., быть ущербе в размере 110 у.Дельный опыт показывает, что судебному порядку рассмотрения жалоб юридические лица, привлеченные к административной ответственности, отдают предпочтение.Срок рассмотрения жалобы, предоставленный Кодексом Российской Федерации относительный административных правонарушениях, аналогичны сроку рассмотрения в суде – 1 месяц.

грузоперевозки ростов
TerryNic - 2018-04-07  12:51:45
 [url=https://sldn50.com]sildenafil 50 almaximo[/url] - sildenafil basics 50 mg, sildenafil genfar 50 mg.
Tadalafil - 2018-04-07  10:34:34
 polyarthritis causes holistic asthma treatment
http://generic-cialis.us.com/# generic cialis
symptoms of allergies in adults diabetes hair loss
generic cialis
Mortintsswaby - 2018-04-07  10:31:39
 Индивидуалки, которые предпочитают все типы секса – классический, анальный, оральный, доступны круглосуточно на ресурсе

[url=http://prostitutkimetroorehovo.ru]Закажи местных индивидуалок с хорошей фильтрацией[/url]
[url=http://opytnye-prostitutki-nizhnego-novgoroda.ru/ksyusha-5]Отыскивай качественных девицпо вызову с близостью от метро[/url]
[url=http://prostitutkidvorecsporta.men/vita]Ищи известных девицпо вызову с близостью от метро[/url]

Номера полных девицпо вызову с детальными фильтрами
Номера милых девицпо вызову с красивой внешностью
Подбирай стройных индивидуалок с подробными фильтрами

pG99!udpq7T
<<[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] [456] [457] >>
*v komentářich nesmíte používat sprostá slova a odkazy!!!Děkuji za pochopeni.