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ářů(10916)
KarSymvop - 2017-12-12  00:14:24
 В заключение хотелось желание отметить, сколько для стабильного успеха необходимо неутомимо и точный тестировать частный сайт. Разместить сайт для бесплатном хостинге проще и быстрее. Всегда процессы сообразно созданию Интернет-ресурса должны осуществляться профессиональными людьми, знающими общество в своем деле, умеющими приспособлять свои знания на практике. ). н. А сквозь неделю Вы решили их обновить, беспричинно якобы изображённое на них оборудование устарело, сиречь Вам показалось, что взамен изображений техники для сайт лучше поместить фото сотрудников – это настраивает посетителей для доверительный лад. Пожирать метод борьбы с этим печальным явлением – непрерывный контроль сайта со стороны оптимизатора.продвижениеТакже положительным моментов быть продвижении будет положение информации о сайте в сайтах-каталогах, так называемых директориях.Вкушать несколько причин, по которым использование не уникального контента очень нежелательно:В настоящее срок интернет понимается скорее будто главный информационная, нежели физическая, то грызть это не множество компьютеров и серверов, связанных телекоммуникационными линиями, а некая информационная общность и универсальное средство связи.
заказать создание веб сайта
[url=http://xn---123-43dbomk
p1ckj1biu.xn--p1ai/]разработка и продвижение сайтов краснодар[/url]
http://xn---123-43dbomk
p1ckj1biu.xn--p1ai/ - создание сайта и продвижение в краснодаре

Кроме продаж прямым способом, также Интернет используют в качестве косвенного канала продаж. И это понимание является одним из важнейших факторов мирового прогресса. Это ведёт к невероятному ускорению прогресса.- Привлечение целевой аудиторииПоложим: возьмем продвижение сайта сообразно продаже цветов. Компания не сообщает ни о количестве, ни относительный истинном местоположении серверов, на которых хранятся все сведения. )Дуглас Меррилл убежден, который любая IT-компания может попасться на цепкую удочку хакеров. Разве выяснится, который тексты не уникальны, то потребуется их рерайтинг. Однако существуют некие общие правила, соблюдая которые, Вы сможете приблизить Ваш сайт к идеалу. Создайте цветовую палитру чтобы достижения своих целей (т.К примеру, пользователь хочет встречать определенную информацию. Допустим, Вы разместили информацию о своей компании на интернет-ресурсе. Неплохо раскрученный сайт имеет ТИЦ в районе нескольких сотен единиц. Нужно простой кончаться в Рунет и Вы издревле в курсе всех событий. Задач обеспечить правильное красивое положение для странице блоков текста и графики осложняется необходимостью учитывать возможность того, что эта страница довольно просматриваться пользователи на разных мониторах с разным разрешением экрана и в разных браузерах, которые имеют приманка особенности отображения содержимого веб-страниц.
Sandorinamus - 2017-12-11  23:26:47
 Всем привет, хочу проинтересоваться и обсудить такой вопрос как "куда можно продать или же где можно купить наших домашних питомцев"?

Почему подняла такой вопрос, просто хотелось бы попробовать себя в качестве заводчика, но вот только где продавать непонятно, не на базар же с ними выходить....

Давайте обсуждать, кто где покупает и кто куда продаёт.
NikitaozCrope - 2017-12-11  22:12:07
 наверхВече: составьте таблицу с Тайтлами сайтов-конкурентов из ТОП-10 и сделайте принадлежащий Тайтл таким, для он выгодно отличался от тех, которые уже снедать в выдаче.Давайте посмотрим, как ее позволительно использовать, работая с ассоциативным массивом.И даже такое состав профессионалов затрачивают на работа интернет-ресурса маломальски дней, а то и недель, причем создание выполняется ими с наибольшей возможной скоростью без ущерба качеству готового продукта.
создание сайтов в ростове
[url=http://создание-сайтов161.рф/seo-prodvizenie.html]seo[/url]
http://создание-сайтов161.рф/seo-prodvizenie.html - продвижение сайтов ростов

А беспричинно, глядя на динамику развития сайта и ее прогнозируемые показатели, вы сумеете вовремя сориентироваться и побеждать более удобный тариф.И даже такое сумма профессионалов затрачивают для произведение интернет-ресурса скольконибудь дней, а то и недель, причем работа выполняется ими с наибольшей возможной скоростью без ущерба качеству готового продукта.В данном случае мы увидим на экране «name», то лопать источник от искомого элемента со значением «Mila».Коли вы следовали всем нашим инструкциям, то следствие вас не разочарует.
Imini - 2017-12-11  20:25:36
 What is my cholesterol and do I need to take medicines for it?
The just route in direction of accomplish your Retail Gross sales Ambitions is within the path of publish down the stats!

[url=http://buy-ventolin.com/]albuterol inhaler online pharmacy[/url]

A recent dependable authority upon the topic enumerates eighteen completely different Levitra 20mg Bayer Prix coloring agents and twenty- 5 flavoring brokers, apart from 5 mineral substances utilized by wine manufacturers to organize wines for the market.
This site offers a complete listing of the various kinds of breathalyzers and likewise includes a information to the differing types.

[url=http://otcbpmeds.com/catalog/Blood_Pressure/Inderal.htm]propranolol for tremors[/url]

Therefore, they don't last you for a really long time and needs to be replaced usually.
Energy oftenly couldn't even final for at some point and the most maddening thing of all is you'll be able to`t change another battery.

http://brains.shinesystems.co.uk/jxuuwvuu_11096/rvuwuv/jjjqt_3tsuu8/fefkt/36292_75743345/

fktrpr94f
To study more click the links beneath.
They can be found in steel and wooden material.
Donaldcoold - 2017-12-11  15:52:54
 [url=http://www.louisvuittonbestellennederland.nl/754-louis-vuitton-belt-black.html]Louis Vuitton Belt Black[/url]
Should you have trouble discovering refreshing, roasted beans in your town, then consider roasting fresh beans on your own. The most convenient and the majority of trick-proof method is to place environmentally friendly gourmet coffee legumes on a cooking holder and roast them inside the oven. Preheat the cooker at the highest temp and roast the beans before you listen to them start to fracture.

[img]https://www.adidaszxfluxsale.nl/images/svu2/18551-adidas-zx-flux-panter.jpg[/img]

Engage a pro to film your video clips when you have issues together. Inadequately produced video clips manufactured in your house are more serious than having no videos. Try out finding a community videographer that may create persuasive storylines and it has quality devices. Make sure you see samples and request for references. Don't just proceed to the least expensive position, but try to find a cost-effective a single for your spending budget.

[img]https://www.nationalemotorbeurs.nl/images/notar2/9199-schoenen-dolce-gabbana-dames.jpg[/img]
Davidlat - 2017-12-11  15:20:02
 jloqbdb

http://www.longchampportemonnee.nl/118-longchamp-verkooppunten.html
http://www.adeline.nu/barbour-vahakangastakki-008.html
http://www.a
ii.dk/ugg-støvler-størrelser-110.html
http://www.eatonsthejewellers.co.uk/air-jordan-8-uk-880.html
http://www.creondesign.ch/kontakt.php?r=135

[url=http://www.hodara.it/scarpe-louboutin-usate-031.htm]Scarpe Louboutin Usate[/url]
[url=http://www.festivaldhiver.fr/nike-air-max-95-bleu-marine-009.php]Nike Air Max 95 Bleu Marine[/url]
[url=http://www.hundeschule-pantli.ch/kontakt.php?e=144]Peuterey Jacken Schweiz[/url]
[url=http://www.oekopruefzeichen.de/503-peuterey-mantel-herren.html]Peuterey Mantel Herren[/url]
[url=http://www.diplo-magazine.co.uk/adidas-js-tubular-393.php]Adidas Js Tubular[/url]
DanielSmuri - 2017-12-11  13:15:08
 Добрый вечер !
Вы хотели бы заработать свои первые money .
Тогда ждем вас на нашем сайте 777 слот играть бесплатно|
играй бесплатно онлайн|

P.S. Тебя также ждет приветственный бонус в 100% при пополнении депозита...
MiLaskinafaign - 2017-12-11  09:21:24
 Какую выбрать шлейку для собаки? Открытый вопрос

Наверняка купить щенка у Вас уже получилось и Вы начали ухаживать за ним. Для комфортного ношения шлейка должна быть правильно подобрана по объёму собаки, купить шлейку можно какую угодно, но нужно внимательно подойти к этому вопросу для обеспечения комфорта вашему питомцу. Существуют размерные таблицы, выкройки, облегчающие выбор. Чтобы воспользоваться таблицей, вы должны снять со своей собачки несколько мерок:
Главная мерка: от костей холки до основания хвоста измеряется длина спины.
Обхват груди: измеряется в самом широком месте сразу за локтями. К результату добавляется для мелких пород 1 см, для крупных — 2 см.
Обхват шеи в том месте, где должен быть ошейник.
Мерки для определения размеров ездовой шлейки снимаются иначе из-за конструктивных особенностей амуниции. Ездовая шлейка требует таких измерений собак:
расстояние между началом грудной кости и холкой;
длина грудины;
расстояние от окончания грудной кости до основания хвоста.
Правильно подобранная по размеру шлейка не болтается на корпусе собаки, но и не давит нигде. Под ремни должна входить ваша ладонь. Правильный замер позволит купить шлейку не выходя из дома, что с экономит вам время.

Ну и в заключении хотелось бы пригласить Вас в нашу группу ВКОНТАКТЕ: Купить щенка / купить котёнка - murzoo.ru
Jeffpoonia - 2017-12-10  21:48:52
 Purchase Cytotec Doxycycline Malaria Bestellen Online Levitra Probiert [url=http://cialgeneri.com ]cialis price[/url] Viagra Orosolubile Vipps Pharmacy Viagra Online Pharmacy'S
Jeffpoonia - 2017-12-10  21:48:35
 Propecia Information Leaflet Priligy Erfaringer [url=http://genericcial.com ]online pharmacy[/url] Ou Acheter Du Kamagra En France
Muzup.me - 2017-12-10  13:25:16
 [url=http://muzup.me/][img]http://muzup.me/images/music-online.png[/img][/url]
скачать denis naidanow wonderland скачать музыку puppet pierce fulton у мене ти одна єдина скачать download mp3 nek demarco si claudia tu nu ti dai seama jah far мантана ангелы скачать zach the loser mp3
[url=http://muzup.me/]ссылка[/url]
Egorkasoasp - 2017-12-09  23:22:49
 Не стоит предпринимать в пространные рассуждения, не имеющие отношения к теме письма;«Проверить правильно ли сеошник распределил запросы сообразно страницам простой: зайдите в любой сервис кластеризации запросов и перепроверьте "готовую" семантикуКраткое изображение темы статьи, который довольно рассмотрено2Заключайте взаимовыгодные союзы и делегируйте полномочияНе заработал контрагент — не заработала (а то и потеряла) комната
[url=https://vk.com/seo_prodvizhenie_krasnodar]заказать сео продвижение сайта[/url]
[url=https://vk.com/prodvizhenie_saita_volgograd]seo продвижение Волгоград[/url]
[url=https://vk.com/seo_prodvizhenie_saitov_spb]seo продвижение спб[/url]

Едва, важно понимать простую истину — ради сбора качественной семантики вполне достаточно:Лучше не поскупиться и обещать индивидуальное приговор у программиста — среди готовых скриптов достойных едва отрицаниеОднако многим клиентам наряду с SEO-оптимизацией требуются смежные услуги, положим, разработка дизайна сайта тож его редизайн, и они ищут агентство, где могли бы предоставить эти услуги в комплексеИскусственно «раздутая» семантика не поможет эффективно продвинуть доход, а вот «слив» бюджета здесь гарантированМы подтвердили логичность такого подхода, собрали и сгруппировали семантику
seo продвижение казань
AgrokrdFep - 2017-12-09  22:21:53
 Марка 42 и 60 — укрывной вещь чтобы крепления на каркас парника, крепление осуществляется способами аналогичными креплению обычной парниковой пленки. Доставка!Удобрения, особенно азотные, стимулируют рост рассады.«Агрил» Франция · качественные нити и УФ-стабилизатор гарантирует не менее 3 сезонов здание;Актуальные вопросы
[url=https://agrohoztorg.ru/каталог-товаров/сетка-притеняющая/]сетка затеняющая[/url]
агролюкс цена
[url=https://agrohoztorg.ru/каталог-товаров/полиэтиленовая-пленка/]полиэтиленовая пленка[/url]

Пробел этого материала – в его ограниченной функциональности.Коль же в нем исполнять отверстия чтобы посадки культурных растений, то можно создать отличную теплую грядку, которой не страшна засуха, множество сорняков и вредителей.Дело в том, что при перегреве и застое воздуха могут начать размножаться болезнетворные микроорганизмы в воздухе теплицы и возбудители различных заболеваний – в грунте.Опытные садоводы говорят, который подсемядольное племя самое важное промежуток у растений, в нем вся сила.
Williamdyday - 2017-12-09  21:23:48
 С чего всё начиналось разве все хотят работать «по-честному») уже изложены во многих книгах и статьях, поэтому взамен теории перейдем к практическим примерам, которые наглядно показывают ошибки и недоработкиНадеюсь, днесь у вас есть базовое понятие о том, якобы проводится SEO-аудит, так который можете выучить дилемма, кому поручить это вопросПлюсы Joomla для оптимизаторовПринадлежащий веб-ресурс необходим каждому SEO-агентству, он должен содержаться раскрученным, функциональным, точный обновляться
seo
[url=https://novosibirsk.skgroups.ru/]seo[/url]
https://novosibirsk.skgroups.ru/ - Заказать Seo продвижение сайтов Новосибирск

Однако очень неоднократно страницы категорий распределяются некорректно с точки зрения SEOС точки зрения оптимизации промеж seo-статьей и seo-текстом нет практически никакой разницыНо в основе их создания лежат всецело разные принципы3Разводить группы товаровSEO продвижение сайта статьями
JoshuaAbada - 2017-12-09  20:15:45
 НАПОДОБИЕ ПРОВЕРИТЬ НАЛИЧИЕ АТЕРМАЛЬНОГО ПОКРЫТИЯНаружные отделочные материалы должны соответствовать с внешней отделкой стены вашего дома, а украшение интерьера помещения — с внутренней обшивкой балкона. Сэндвич-панели - это отделочный пластик (пластиковые откосы), являются идеальным решением для оконных проемов. Их позволительно легко очистить быть помощи теплой воды и мыла. Этот профиль довольно легко моется. Простейшими самостоятельными операциями быть помощи обычного ключа можно свободно отрегулировать некоторый параметры, какой доступны к изменению. Плохая вентиляция в помещении – недостаток вентиляции, не рабочие вентиляторы, забитые решетки разве вентиляционные каналы. Впрочем его концентрация настолько незначительная, который не представляет опасности и угрозы для жизни. А вот подверженность электрохимическому разрушению победить покуда не удалось. Архитектурный. Только даже окнам из хорошего пластика некоторый москвичи предпочитают алюминиевые окна.профилированные металлические листы;Зачем нужны тонированные окна ПВХ?МАТЕРИАЛЫ ДЛЯ ВНУТРЕННЕЙ ОТДЕЛКИ
пластиковые окна в бишкеке
[url=https://uslugi-mastera-kg.ru/]ремонт пластиковых окон[/url]
https://uslugi-mastera-kg.ru/ - пластиковые двери бишкек

мочь вторичной переработки;Главный механический привод (запор). Скажем, плясать. А вот в ситуации, когда человек начинает строительство собственного дома, то здесь уже дается вольность фантазии – позволительно выбрать окна совершенно любого размера, которые будут выпускать света ровно сколь, сколь вам нужно ради комфортного проживания. Бережливость быть покупке окна не исключает происхождение конденсата. Этот оконный профиль отличается своей эстетичности – поверхность профиля гладкая и блестящая, а штапик и створка имеют закругленную форму. Цвет откосов на окна также может соответствовать с цветом профилей оконных, даже около имитации дерева. Благодаря уникальным характеристикам и свойствам, конструкции из алюминия могут привыкать в качестве витрин магазинов, быть обустройстве фасадов, входных групп торговых и развлекательных комплексов, стадионов, концертных залов.СПЕЦИФИКА ОСТЕКЛЕНИЯ КОТТЕДЖЕЙОбщество Rehau производит высококачественные надежные профили чтобы металлопластиковых окон. Часто они идут alias большого размера тож нестандартной формы, что иногда практикуется в многоэтажных домах. Окна ПВХ бывают с короткий толщиной армирующих элементов до 0,6 мм, сколько так же, является причиной плохого качества изделия.Отделку лоджии или балкона выполняют как снаружи, так и изнутри.
DanielSmuri - 2017-12-09  19:12:20
 Добрый день !
Вы хотели бы заработать свои первые кеш .
Тогда ждем вас на нашем сайте бесплатные демо игры казино без регистрации|

P.S. Тебя также ждет приветственный бонус в 100% при пополнении депозита...
Gibgas.me - 2017-12-09  18:45:27
 [url=http://gibgas.me/][img]http://gibgas.me/images/logo.png[/img][/url]
ауа newton nila mania скачать песню да спасибо датка бий тобу сары озон скачать mix9 just dance скачать турпал холодный дождь скачать
[url=http://gibgas.me/]привожу ссылку[/url]
Gibgas.me - 2017-12-09  18:45:22
 [url=http://gibgas.me/][img]http://gibgas.me/images/logo.png[/img][/url]
ауа newton nila mania скачать песню да спасибо датка бий тобу сары озон скачать mix9 just dance скачать турпал холодный дождь скачать
[url=http://gibgas.me/]привожу ссылку[/url]
Gibgas.me - 2017-12-09  18:45:17
 [url=http://gibgas.me/][img]http://gibgas.me/images/logo.png[/img][/url]
ауа newton nila mania скачать песню да спасибо датка бий тобу сары озон скачать mix9 just dance скачать турпал холодный дождь скачать
[url=http://gibgas.me/]привожу ссылку[/url]
Gibgas.me - 2017-12-09  18:45:11
 [url=http://gibgas.me/][img]http://gibgas.me/images/logo.png[/img][/url]
ауа newton nila mania скачать песню да спасибо датка бий тобу сары озон скачать mix9 just dance скачать турпал холодный дождь скачать
[url=http://gibgas.me/]привожу ссылку[/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] [456] [457] [458] [459] [460] [461] [462] [463] [464] [465] [466] [467] [468] [469] [470] [471] [472] [473] [474] [475] [476] [477] [478] [479] [480] [481] [482] [483] [484] [485] [486] [487] [488] [489] [490] [491] [492] [493] [494] [495] [496] [497] [498] [499] [500] [501] [502] [503] [504] [505] [506] [507] [508] [509] [510] [511] [512] [513] [514] [515] [516] [517] [518] [519] [520] [521] [522] [523] [524] [525] [526] [527] [528] [529] [530] [531] [532] [533] [534] [535] [536] [537] [538] [539] [540] [541] [542] [543] [544] [545] [546] >>
*v komentářich nesmíte používat sprostá slova a odkazy!!!Děkuji za pochopeni.