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ářů(10301)
Aaronnaw - 2018-04-13  16:52:24
 Отличные строительные советы здесь [url=http://akvakraska.ru/]akvakraska.ru[/url]
Patrickoress - 2018-04-13  08:06:58
 Последние женские новости здесь [url=http://french-foto.ru/]french-foto.ru[/url]
AdrianKnolF - 2018-04-12  23:45:59
 Испытание честности онлайн казино по независимым аудиторамОдно и то же виртуальное казино может почитаться одними и презираться другими. Имеет свою мобильную версию3) Вечно контролируйте себя и приманка действия. Слоты. Практически постоянно игорные онлайн-заведения начисляют бонусные очки изза сделанные ставки, которые затем дозволительно обменять для вещи из официального магазина, фриспины, денежные награды и многое другое. Это уединенно из аспектов успеха в любом виде игр. В часть случае, когда вы полностью уверены в часть, что сайт не работает из-за блокировки провайдера (в этом случае вы увидите соответствующее известие), можете ради начала попробовать воспользоваться специальной ссылкой ниже, которая практически в 100% случаев обеспечивает беспроблемный вход на сайт Play Fortuna Casino:Следует смекать, сколько в играх такого вида уменьшить превосходство игорного заведения несказанно проблематично. Здесь стоит отметить, сколько казахское казино вы не сможете встречать в принципе, поскольку законами данной страны деятельность казахских интернет-казино строго-настрого запрещена. Проверка честности онлайн казино сообразно лицензии
топ казино спб
https://azart-portal.com/o-vulkanah - вулкан казино онлайн
[url=https://azart-portal.com/product-category/casino]топ казино онлайн питер[/url]

111 joycasino com - уже не доступноОтдельный онлайн слот имеет урочный процент отдачи, это называется пейаут. К примеру, казино нет никакого смысла «подкручивать» кено или игровые автоматы, поскольку там достоинство казино очевидно. Рекомендуем Вам передавать достоинство зарубежным онлайн казино либо же надежным крупным русским типа RedStar Casino, MarathonBet Casino, ПлейФортуна Казино, JoyCasino либо Casino-X, если Вы желаете играть для ставках через $5-$10 и выше изза вращение. Единственное награда - в мобильной версии игрокам доступно меньшее наличность игр. Коли игрок хочет существенно снизить достоинство игорного заведения, то ему нуждаться выбрать правильную рулетку. Loki Casino - одно из молодых и популярных онлайн казино для Биткоины, рубли и ряд других валют, которое ныне конечно пользуется спросом у любителей онлайн азартных игр. Конечно, учет ошибок необязательно позволит вам выиграть, впрочем услада через игры в казино онлайн вы получите значительно больше. Казалось желание, вовсе както заядлые гемблеры не знали, сколько им придется покинуть уютные и просторные залы и переместиться следовать особенный компьютер. Одна из них называется GamCare, в списке сертифицированных ею компаний найдется немало известных брендов. На первом шаге заполнения регистрационной анкеты в Malina Casino пользователи могут замечать выделенное немного более тусклым цветом поле под названием "Введите промо код". Наравне вы могли запоминать из текста выше, главным преимуществом использования промо кода является мочь начать шалить в игровые автоматы для реальные капитал совершенно бесплатно. Ниже вы можете ознакомиться с правилами этикета, которых вам следует придерживаться во время игры в честных интернет казино. Промокод позволительно ввести только единолично единожды - во время регистрации счета. Те, кто хоть желание мало знаком с азартными играми, в том числе и в интернете, прекрасно понимают, чтоб там дозволено, как быстро выиграть большую сумму денежных средств, так и проиграть всетаки в одночасье. Поскольку зрелище через данных поставщиков считаются одними из самых качественных, времени изза ними жить позволительно уйму, а помогут вам в этом многочисленные бонусы, в том числе и для депозит. Относительный этой игре ходят разные слухи, которые не соответствуют действительности, следовательно не стоит им доверять. К сожалению, в сети интернет мы часто видим плохие отзывы игроков онлайн казино, беспричинно точно в большинстве случаев эти отзывы пишут либо конкурирующие казино, либо игроки, которые очень проигрались (человек которые не знают слова "осрамиться"). Скачать мобильную версию Azino777RedStar Casino RedStar Casino Отличное казино, направленное для русскоговорящий сегмент рынка. Рассмотрим подробнее требования к онлайн-казино. Ради начала нуждаться ознакомиться со списком игр, которые предлагает казино. К примеру, коли у Вас есть стабильный барыш в рублях, и Вы привыкли все вычислять именно в этой валюте, рекомендуем Вам избирать казино и чинить депозиты в российских рублях. Поэтому, чтобы не портить никому дух и дать всем мочь расслабиться во сезон зрелище, ведите себя в чате по-джентльменски. Таким образом, порядок не может распознать того, сколько вы находитесь в стране, где доступ к сайту ограничен, а следовательно предоставляет вам доступ к любимому казино. Некоторый пользователи переходят на онлайн-игры, которые завсегда и повсюду доступны. И, тем не менее, если ваш кровный смертный пристрастился к азартным играм, не спешите отчаиваться. Вследствие того, который моментально же потом регистрации пользователи попадают в непосредственный комната, их взор привлекает вкладка «Бонусы», а на ней - арена для ввода специального промо-кода. Ниже вы можете подобрать одно из рабочих зеркал Candid Casino:

малина казино
Justinlodat - 2018-04-12  21:23:05
 Конкуренцию стандартным петельным межкомнатным открывающимся конструкциям составляют более функциональные решения – сдвижные двери. Они так же включают в себя полотна из древесины или иного материала, вот только главные элементы блока движутся по прямым линиям (направляющим) параллельно стене. Читайте об этом подробнее на сайте [url=http://akro-spb.ru]akro-spb.ru[/url]
Archiehes - 2018-04-12  21:05:29
 Подарок руководителю, крупному бизнесмену, серьезному и ответственному человеку зрелого возраста должен быть солидным, запоминающимся, весомым, и недешевым, однозначно. Подробнее об этом читайте на сайте [url=http://fi-hi.ru]fi-hi.ru[/url]
ShirleyNuH - 2018-04-12  12:50:12
 I cannot thank you enough for the forum post.Really thank you! Will read on... [url=http://mgu6mveg.tumblr.com/]Selfridge[/url]
ShirleyNuH - 2018-04-12  09:56:37
 Some truly select forum posts on this web site , saved to fav. [url=http://mgu6mveg.tumblr.com/]Ezpeleta[/url]
AlfridsInjut - 2018-04-12  02:14:30
 Ищите персональную массажистку на сеанс. В руках массажисток вы сможете навсегда забыть про различные ограничения и проникнуться расслаблением в полной мере

[url=http://novyj-urengoj.erotic-massage.rest/ledinikol]Подбирай полных массажисток с детальными фильтрами[/url]
[url=http://astrahan.erotic-massage.rest/lyudmila-15]Смотри горячих массажисток с детальными фильтрами[/url]
[url=http://anapa.rusmassage.net]Подбирай свежих массажисток с детальными фильтрами[/url]

Номера свежих массажисток с расширенным поиском
Номера полных массажисток с подробными фильтрами
Закажи страстных массажисток с близостью от метро

http://krasnoyarsk.erotic-massage.rest
http://simferopol.erotic-massage.rest
http://krasnodar.erotic-massage.rest

26i@pEve5jV
Alfredozek - 2018-04-12  00:48:47
 Услуги для вашего бизнеса
http://uesk.tw1.su
Haroldpient - 2018-04-11  04:16:45
 ynxztm [url= http://paydayrgd.com/weekend-payday-loans ]payday loans[/url]
SPoturgy - 2018-04-11  00:09:23
 Вы застряли на Youtube, изучая новые клипы? Очень хотелось бы посмотреть клипы бесплатно, но не находите заслуживающие внимания клипы в хорошем качестве в ряду изобилия записей исполнителей разных стран? Это не пробоема! На страницах mobileyell.info есть возможность слушать клипы, которые точно берут за душу и балуют уши меломана! Мы отискиваем для вас новые клипы постоянно, отслеживая звезд музыкальной индустрии и просматривая самые интересные каналы. Здесь можно просматривать клипы группы, не знакомой вам ранее, но именно эти работы заслуживают внимания ценителя. Естественно, вы сможете смотреть клип бесплатно в хорошем качестве, с хорошим звучанием. Отдельно следует отметить, что иностранные клипы на ресурсе – это реально что-то очень яркое, а не очередной "хит" одного дня. Исполнителей миллионы, а настоящих талантов среди них на самом деле мало. Чтобы быть "в теме", мы предлагаем также смотреть русские клипы 2017 и новинки текущего года. Отслеживайте обновления на сайте: музыка, клипы, интересные записи, фильмы и многое другое.
Афиша: [url=http://mobileyell.info]лучшие клипы[/url]
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 речи, вы желание не встретили болтовня «купить окно пластиковое», фраза прозвучала бы беспричинно: «подкупать пластиковое окно»Поисковые запросы разумно выделять только в документе с текстом, чтобы отследить использование всех ключей

продвижение сайтов Санкт-Петербург
<<[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] >>
*v komentářich nesmíte používat sprostá slova a odkazy!!!Děkuji za pochopeni.