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ářů(10302)
Оказываем услуги по сбору любой информации по интернет. Соберем все: информацию, ссылки, статьи, контакты клиентов или поставщиков итд Выполним любые Ваши поручения по сбору информации в интернет Подробнее о наших возможностях по email: dimagurin491@gmail - 2018-04-18  01:20:18
 http://w.w.w/ Оказываем услуги по сбору любой информации по интернет. Соберем все: информацию, ссылки, статьи, контакты клиентов или поставщиков итд Выполним любые Ваши поручения по сбору информации в интернет Подробнее о наших возможностях по email: dimagurin491@gmail.com
Оказываем услуги по сбору любой информации по интернет. Соберем все: информацию, ссылки, статьи, контакты клиентов или поставщиков итд Выполним любые Ваши поручения по сбору информации в интернет Подробнее о наших возможностях по email: dimagurin491@gmail.com http://w.w.w/
LubovFreli - 2018-04-18  00:05:16
 Сделки с недвижимостью
[url=http://landenvlaq03603.blogminds.com/]otzyv[/url]|
Jefferyhit - 2018-04-17  17:39:01
 Привет всем участникам! Класный у вас сайт!
Нашёл инфу в сети:
http://techrize.ru/news/25946-makkeyn-zayavil-chto-ssha-proigryvayut-voynu-v-afganistane-voennyy-obozrevatel.html [b] Маккейн заявил, что США проигрывают войну в Афганистане - Военный Обозреватель [/b]
http://techrize.ru/news/25284-islamisty-otbrosili-siriyskuyu-armiyu-dalshe-ot-pogranperehoda-at-tanaf-voennyy-obozrevatel.html
http://techrize.ru/news/10175-svodka-sobytiy-v-sirii-za-9-fevralya-2015-goda.html
Ещё много интересного по теме нашел тут: [b] милитари мапс новороссия [/b] [url="http://techrize.ru/"] днр министерство жкх адрес [/url]
MiltantACURE - 2018-04-17  16:49:14
 Дайте возможность самому себе избавиться от напряженности, прочувствуйте подлинную страсть и обжигающую необузданность. Порадуйте себя незабываемым вечером с путнаой

[url=http://voronezh.prostitutki.me/54_alena/]Организуй страстную групповуху с индивидуалками[/url]
[url=http://ufa.prostitutki.me]Странички качественных путан с красивой внешностью[/url]
[url=http://vologda.prostitutki24.me/54_lina/]Уникальный уровень удовольствия от проституток[/url]

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

http://ulyanovsk.prostitutki.me/63_milana/
http://biysk.prostitutki.me/60_marinka/
http://kurgan.prostitutki.me/66_zhanna/

zHv8unb3$9G
Brianbance - 2018-04-17  14:05:44
 beautiful website http://myclothestrend.com/dresses-review/white-confirmation-dresses-for-teenagers-2018/?epik=0MaJHE_IW3x1x
KennetsTaG - 2018-04-17  06:29:00
 Зарабатывай кэш после демо-режима и получай дополнительные баллы. Проверенный сайт онлайн слотов

[url=http://igrovyeavtomatynadengi.win/reef-treasures]Зарабатывайте в игровые автоматы бесплатно и разгадайте стратегию победы[/url]
[url=http://igrovyeavtomatyonline.men/hidden]Играйте в игровые автоматы бесплатно и разгадайте стратегию выигрыша[/url]
[url=http://novyeigrovyeavtomaty.men/pl_fruitsnstars]Выигрывайте игровые аппараты бесплатно с бездепозитным бонусом[/url]

Возможность поднять бабла в игровых автоматах
Уникальные игровые слоты без депозита
Играйте в игровые автоматы и выводите крупные суммы

http://novyeigrovyeavtomaty.men/pg_golden_goal
http://novyeigrovyeavtomaty24.men/easte
_delights_c
http://novyeigrovyeavtomaty777.win/bs_nedandhisfriends

dtu8@8X2dqO
Bobcatecoto - 2018-04-17  03:28:55
 На рынок СССР техника Bobcat впервые поступила в 1977 году, преимущественно это были малогабаритные универсальные машины. В 1991 году официальный эксклюзивный дилер американской фирмы Melroe компания Scott-European Corporation открыла первый Московский дилерский центр ООО «Бобкэт».
Особенности и преимущества
http://www.vyiary.com/members-2/cottontrowelb47/activity/201700/
AurelioNeak - 2018-04-16  23:38:54
 Looking forward to reading more. Great forum. Cool. [url=http://gb5vjjs5.tumblr.com/]Brunmeier[/url]
AnnaPak - 2018-04-16  20:46:09
 Лучшие новостные заголовки СМИ за 2017 год:
Корабль с баранами «Ашот-7» потопил российский военный корабль-разведчик
Блоги о недвижимости
[url=https://smithsfoodgroup.tumblr.com/]Источник: Блог о недвижимости...[/url]|
[url=https://subspacebabe.tumblr.com/]Источник: Блог о недвижимости...[/url]|
AurelioNeak - 2018-04-16  15:35:09
 It is appropriate time to make some plans for the future and it is time to be happy. I have read this post and if I could I want to suggest you few interesting things or suggestions. Maybe you can write next articles referring to this article. I wish to read more things about it! [url=http://gb5vjjs5.tumblr.com/]Larko[/url]
Williamdyday - 2018-04-16  06:58:53
 В конечном итоге большинство клиентов SEO-компаний усвоили: столоваться ключевые слова, сообразно ним нужен ТопПомните известную фразу — “Контент – правитель!”? Контент, это настоящий веский составляющий элемент сайта, но во фразе не говориться, который постоянно остальные факторы ранжирования не имеют значения и опубликовав резкий и уникальный контент вы взлетите в топКоторый такое SEO-статья и наподобие живописать SEO-текстыИсключая того, это позволяет повлиять для выдачу после поведенческие факторыКомментарий:
продвижение сайтов
[url=https://novosibirsk.skgroups.ru/]продвижение сайта[/url]
https://novosibirsk.skgroups.ru/ - продвижение сайтов Новосибирск

Безусловно, есть направления, где постоянное развитие и добавление нового контента не имеет смысла или вовсе невозможноИ все же, без помощи опытных специалистов добиться надлежащего качества довольно страшно сложно:Также стоит отметить, сколько чтобы интернет-магазинов на Joomla существует изрядно вариантов расширенийНе стоит предпринимать в пространные рассуждения, не имеющие отношения к теме письма;Заполните мета-теги Championship и Representation

Заказать Seo продвижение сайтов Новосибирск
Robertcem - 2018-04-16  03:19:34
 Руководство заказчика и копирайтераОпровержение для дилемма, описание первого пункта (2 абзаца)правильно составьте robotsURL-адреса должны быть не длиннее 110 символовДобавить статью в социальные закладки
продвижение сайта Воронеж
[url=https://voronezh.skgroups.ru/]продвижение сайтов Воронеж[/url]
https://voronezh.skgroups.ru/ - seo продвижение сайта

Эффективность бизнеса в целом и желание клиентов выделять определённый бюджет на рекламу вторично же не являются прямым следствием работы студииКто-то из пользователей сервиса закладочника, вероятно, ища нужные термины, заинтересуется вашей статьей и прийдет к вам для сайт;Семантическое ядро позволяет оценить конкуренцию в нише паки до начала основных работ по продвижению, считает Виталий КравченкоВ некоторых случаях миссия "собрать полное семантическое суть ради сайта" не решаема накануне начала активных работ по продвижению»,– в url (адрес) статьи поместить важные ключи (для транслите, если русский);

seo продвижение сайта Воронеж
SeopermBEita - 2018-04-16  01:32:29
 Не старайтесь разрекламировать себя быть первой же встрече, не заключайте быстрых сделок и не переходите к обсуждению долгосрочных отношений через изрядно минут потом знакомстваЧем мы занимаемся отдельный числоВедь вы же многое можете рассказать, надо всего спроситьНапоследок, семантика собрана, а клиент получил заветный файл Surpass, содержащий оглавление ключевых слов и фраз, разбитых на группы«Технически бизнес практически николи на моей памяти не показывал хороший степень, возьмем, в полноте сбора семантики
seo продвижение сайта
[url=https://perm.skgroups.ru/]seo продвижение сайта[/url]
https://perm.skgroups.ru/ - seo

Соразмерно, с такими клиентами довольно проще найти общий язык в силу понимания ими специфики вашей деятельностиПервые шагиОбычно в статье раскрываются две-три основные мысли, составитель отвечает на величавый задача, освещает популярную тему с новой стороны сиречь предлагает собственное экспертное решение проблемы пользователяURL-адреса должны быть не длиннее 110 символовСтатейное продвижение сайта — это один из самых эффективных способов поискового продвижения сайта, так вдруг именно для поисковой оптимизации контента и построено SEO продвижение

seo продвижение сайта Пермь
Grishasuelo - 2018-04-15  23:44:39
 Образно говоря, пункты меню — это основа, ствол и ветви дерева, совершенно остальное уже формируется вокруг них;В наши дни около поиске информации о потенциальных клиентах и партнерах, а также продвижении собственного бизнеса не обойтись без интернет-технологий, и SEO-специалисты понимают это якобы никто новыйНе получится заставить клиента заключить обязательство ещё с одним поставщикомНо накануне таких схем, ровно мне кажется, большинству наших компаний ещё поодальСемантическое суть позволяет оценить конкуренцию в нише опять предварительно начала основных работ сообразно продвижению, считает Виталий Кравченко
продвижение сайта Краснодар
[url=https://krasnodar.skgroups.ru/]продвижение сайта[/url]
https://krasnodar.skgroups.ru/ - продвижение сайтов Краснодар

Изучайте ожидание предстоящих отраслевых конференций и межкорпоративных мероприятий чтобы представителей вашей целевой аудитории и регистрируйтесь для участия в нихВ идеале совершенно тексты должны вмещать максимально полезную для пользователя информацию«Владельцу бизнеса даже не непременно разбираться в часть, сколько такое семантическое суть и правильно ли оно составленоВопрос решается с привлечением грамотного программиста, работающего вместе с SEO-специалистомпродающие видеописьма, адресованные целевой аудитории

продвижение сайта Краснодар
AdrianKnolF - 2018-04-15  15:03:48
 Потом погашения данного кода вы получите бездепозитный бонус от Голден Стар Казино в размере 20 фриспинов для видео слот Lucky Sweet, играя на которые сможете побеждать реальные деньги. Некоторые игроки думают, который буде они находятся у себя дома накануне монитором, то могут делать и говорить всегда, что захотят вполне свободно, следовательно могут позволить себе даже самые смелые высказывания. Это одно из самых надежных интернет казино, которое предлагает всем своим новым игрокам затем регистрации бонус после депозит в размере до $600. Кстати говоря, пополнять счет совсем необязательно, если вы не преследуете цель терпеть свою удачу в игре для реальные деньги. Здесь проводятся исследования, и результаты их разом же фиксируются. 6. Всякий жилец приморского города ежедневный натыкался на десятки предложений посетить такой корабль. Главная конец участников этого проекта – определить, что движет человеком, который в процессе зрелище теряет контроль над собой. Только в любом случае социальные казино стали собирать всетаки больше популярности между интернет-пользователей и стали неплохой альтернативой виртуальным игорным домам. Также он не верит в фортуну, понимая, сколько такое дисперсия. Обычно игроки в казино не желают издерживать период напрасно, они только ищут надежное место для получения адреналина и определенной порции азарта через казино игр. Умышленно для вас мы отслеживаем заблокированные ссылки и новые зеркала, помечая их специальным образом, чтоб вы навеки могли отличить рабочее зеркало от нерабочего. А это значит, что персональные причина игрока и информация о выигранных им средствах не могут замечаться переданы третьим лицам. Поэтому нередко они обращаются к поисковым системам с запросами типа "Казино Неизвестный - найти похожие казино" или "аналоги онлайн казино Casino-X.com". Дело это важное, спешить не стоит. Скачиваемый контрагентПрактически сразу потом того, как пользователи Плей Фортуна Казино начали возопить на проблемы с доступом из-за блокировки провайдерами, оператор начал пить меры. И боязнь этот абсолютно безоснователен. Коль ни нераздельно из вышеуказанных методов не срабатывает, дозволительно связаться с администрацией, которая предоставит алгоритм решения проблем. Словом, у вас полдничать множество вариантов, позволяющих пополнить вас игровой счет в казино онлайн!Gonzo’s ExpeditionВ онлайн казино, рекомендованных ради зрелище жителям Казахстана. Не стоит горячиться переходить для второй портал, ведь можно встречать приговор проблеме. В последнее пора AzartPlay Casino активно штурмует западный сегмент онлайн гемблинга. В данной статье мы расскажем о самых интересных и запоминающихся приметах и суевериях игроков казино. Этикет в интернет казино
обзор казино питер
https://azart-portal.com/o-vulkanah - вулкан казино онлайн
[url=https://azart-portal.com/product/casino-x]casino x com[/url]

joycasino 17 com - уже не доступноElementsКак не ошибиться быть выборе виртуального казино?

slots magic
Chrisfah - 2018-04-15  11:56:11
 [url=https://www.vzlomtg.com/how-to-work]Как взломать телеграм[/url] - скачать программу +для взлома телеграм, программа +для взлома телеграм.
Jasonagets - 2018-04-15  11:30:27
 Последние новости здесь [url=http://kfaktiv.ru/]kfaktiv.ru[/url]
Bobcatecoto - 2018-04-14  09:28:22
 На рынок СССР техника Bobcat впервые поступила в 1977 году, преимущественно это были малогабаритные универсальные машины. В 1991 году официальный эксклюзивный дилер американской фирмы Melroe компания Scott-European Corporation открыла первый Московский дилерский центр ООО «Бобкэт».
Предлагаемые машины, в основном, находят применение в сфере строительства, однако успешно эксплуатируются и в сельском хозяйстве, и на транспорте. Телескопические погрузчики идеально подходят для возведения малоэтажных зданий, а также для подготовки строительной площадки, в частности, для землеройных работ. Широкий выбор навесного оборудования позволяет наилучшим образом адаптировать приобретенную Вами модель для решения Ваших задач. Наша Компания предлагает самый широкий выбор и самые низкие цены на спецтехнику производства компании Bobcat, поскольку у нее налажены прямые поставки от производителя. Кроме того, если Вы решите купить телескопический погрузчик у нас, Вы можете быть уверены в высоком качестве гарантийного и сервисного обслуживания, а также в том, что Вы всегда сможете приобрести дополнительное оборудование для своих машин, конечно, по самым выгодным ценам. Мы занимаемся продажей телескопических погрузчиков с момента своего основания , и покупая погрузчик у нас, можете быть уверены, что его качество и надежность проверили уже тысячи покупателей.
http://www.digitalcurrencycouncil.com/members/jumpertrowelj95/activity/458866/
Agustinababs - 2018-04-14  05:09:38
 see it here [url=https://www.facebook.com/mattresscoupon/]for beginners[/url]
browse around these guys [url=https://mattresscoupon.tumblr.com/]check this link right here now[/url]

Full Report check this link right here now
on the main page what Google did to me
Davidhiz - 2018-04-13  18:37:05
 Короткое свадебное платье отлично подойдет чтобы тех, который хочет продемонстрировать идеальные ножки. Для смугленьких девушках хорошо смотрятся постоянно тона. Мягкие линии расклешенной длинной юбки сбалансируют фигуру с узкими бедрами. Чтобы этого необходимо понять, какое впечатление вы хотите производить для людей и сколько именно придает вам чувство уверенности. С чем надевать кружевные платья?джинсы — к ним дозволено подобрать блузу любого цвета и фасона;цветные брюки — весьма оригинальное соединение с однотонной блузой;
домашний трикотаж оптом новосибирск
[url=http://all-optovik.ru/catalog/detskiy-trikotazh-optom/]купить детский трикотаж оптом от производителя[/url]
http://all-optovik.ru/catalog/trikotazh-optom/ - трикотаж оптом новосибирск

футляр (отличный сочетается с водолазкой тож тонкой блузкой);длина;Для девушек, не любящих повышенного внимания к своей персоне, рекомендуется надоедать к более спокойным оттенкам. А бывает и наоборот — на зачинщик суждение смотрится отлично, только не соглашаться вам к лицу. Франчайзинг с известными бутиками одежды.Теперь в моде асимметричные замысловатые линии для подоле, глубокие острые и плавные круглые вырезы.
<<[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.