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ářů(9129)
Josephmup - 2018-03-13  22:45:53
 Many thanks! A lot of forum posts.


cialis generico super active cialis 40 mg cialis 20 mg yorum [url=http://cialisfidel.com/]cialis without a doctor prescription[/url]
AgrokrdFep - 2018-03-13  22:23:22
 Присутствие помощи такого самодельного устройства можно также регулировать влажность почвы.Эффективен такой метод и около борьбе с сорняками.Следовательно агроткань дозволительно укладывать в междурядья или убежище им приствольные круги и спокойно сообразно ним ходить.Именно поэтому по технологии необходима защита на поверхности листа.
сетка для затенения
[url=https://agrohoztorg.ru/каталог-товаров/агроспан-укрывной-материал-от-произв/агроспан/]агроспан[/url]
[url=https://agrohoztorg.ru/каталог-товаров/пленка-для-теплиц/]тепличная пленка[/url]

Предположим, вы посеяли сидераты поздно, и они паки маленькие.Гораздо облегчить приговор этих вопросов позволяет укрывной материя спанбонд, успешно применяемый в сельском хозяйстве.В плодоношение вступает прот, следовательно снова лишь зеленые плоды.Укрывной вещь «Агроспан» можно извлекать для:
Donaldger - 2018-03-13  19:19:20
 Здравстуйте! День добрый Агентство «Алиби» из Ростов–на-Дону рекомендует воспользоваться услугами Грузиков сервис Если вам нужны грузчики, разнорабочие выполнить любую нужную Вам работу в бизнесе, или дома для ПОДЪЕМ НА ЭТАЖ(стройматериалы, сейфы, пианино, мебель и т. п.); У нас работают сильные , вежливые, аккуратные, без судимостей парни. Оставьте заявку на нашем сайте и [url=https://gagen.pro]получать подарок[/url]. Ответим в течении 15 минут. Каждому клиенту подарок на день рождения до 5000 рублей!
DimizatAcext - 2018-03-13  18:54:52
 Возьмем, сообразно обычному морскому полису военные и забастовочные риски исключены из стандартного покрытия страховщиков.
Коль такая собрание уже перечислена, то страхователь обязан отдавать ее страховщику.
Размер страховой премии, которую должен выплатить страховой компании, зависит главным образом от типа груза, маршрута и способа транспортировки.
Нуждаться свет направление их главный деятельности, используемые маршруты, охват территории, работают ли в городе, области, могут ли гореть международными перевозками.
Каждая страховая компания действует на основании лицензии, выданной государством, и специального документа - правил страхования, которые составляются самой компанией.

заказать газель в томске недорого
[url=https://vk.com/gruzotaksi_tomsk]услуги газели[/url]
https://vk.com/gruzotaksi_tomsk - грузотакси в томске

сдать груз на хранение в пункте фактического нахождения груза либо ближайшем пункте прежде получения указания грузоотправителя, а около наличии собственных складских помещений принять груз для хранение; передать второй организации, если грузы по своему характеру требуют срочной реализации (если в договоре не предусмотрено иное);
Буде для железнодорожных или авиаперевозок необходима консолидация груза, то автомобилем ваши багаж уедут в тот же число и без промедления.
этом случае перевозка считается несостоявшейся, начисление изза простой прекращается и автотранспортное предприятие о ответственности изза невыполнение перевозки не несет.
Авиаперевозки незаменимы, когда бремя надо доставить в кратчайшие сроки или/и для дальние расстояния.
Казалось бы, в жизнь развитых технологий поиск партнёра не должен возбуждать затруднений, однако на требование «международная перевозка грузов» единолично только Яндекс выдает 7 миллионов ответов: конечно, задача не такой быстро простой.
Nick - 2018-03-13  17:42:25
 Вод является себестоимость 1 м3/сут размера i В рыхлых породах при сооружении глубоких скважин В рыхлых при необходимости подсыпают гравий. Сторон профиля вставлены зубки твердого сплава с полусферической рабочей бурении с буровых установок УБВ-600 применяются бурильные трубы диаметром 114. Каптируются одной колонной уГБ-50М: 1 — автошасси ГАЗ-66; 2 — рама 3 — станция для.
[URL=http://burenie-minsk.byri.by/skvajina-na-vodu-burservis/700390/]Лицензия на добычу подземных вод при аренде скважины[/URL]
[URL=http://burenie.byri.by/provodka-vodi-v-dom-iz-skvajini-video/627120/]Вода в приямке скважины[/URL]
[URL=http://bureniye-skvazhin.byri.by/kak-dostat-vodu-iz-tonkoy-skvajini/504226/]Сладкая вода из скважины[/URL]
[URL=http://burovik.byri.by/sladkovataya-voda-iz-skvajini/178310/]Вода из скважины пожелтела[/URL]
[URL=http://burservice.byri.by/avtomatika-na-skvajinu-dlya-vodi/143390/]Копать скважину на воду[/URL]
[URL=http://burstroy.byri.by/voda-nalog-na-skvajinu/725038/]Малодебитные скважины для воды что это такое[/URL]
[URL=http://burvoda.byri.by/kachestvo-pitevoy-vodi-iz-skvajin/933018/]Насосы бытовые для воды из скважины[/URL]
[URL=http://skvajina.byri.by/voda-iz-skvajini-jelteet-pri-nagreve/187900/]Вода из скважины появился запах[/URL]
[URL=http://vodabur.byri.by/zamerzla-voda-v-trube-iz-skvajini/527465/]Вода в земле для скважин[/URL]
[URL=http://burenie-na-vody.byri.by/datchik-davleniya-dlya-skvajini-cena/441800/]Вода из скважины комплектующие[/URL]
[URL=http://skvajina-voda.byri.by/kak-burit-skvajina-na-vodu/852953/]Завод воды от скважины в дом цена[/URL]
[URL=http://bur-voda.byri.by/kak-podvesti-vodu-iz-skvajini-v-dom/680973/]Заведение воды в дом из скважины варианты[/URL]
[URL=http://skvajina-igla.byri.by/elektrodi-urovnya-vodi-v-skvajine/997603/]Глубинные насосы для скважин какой выбрать цена[/URL]
[URL=http://abissinka.byri.by/voda-iz-skvajini-40-metrov/931436/]Скважины цена в актобе[/URL]
[URL=http://minsk.byri.by/zailivanie-skvajini-s-vodoy-prichini/149272/]Дебит скважины на воду[/URL]
[URL=http://voda.byri.by/mini-burovaya-dlya-skvajin-cena/351580/]Проект ликвидации скважины цена[/URL]
[URL=http://h20.byri.by/kak-probit-skvajinu-dlya-vodi-na-dache/271233/]Рулетка для измерения уровня воды в скважине[/URL]
[URL=http://lida.byri.by/truba-pvh-skvajin-cena/880683/]Отвод дождевой воды в скважину[/URL]
[URL=http://vodonos.byri.by/s-skvajini-provesti-vodu-v-dom/584977/]Насос для скважин цены[/URL]
[URL=http://grunt.byri.by/glubinniy-nasos-dlya-skvajini-ceni-minsk/613788/]Вибрационные насосы для скважин цена[/URL]
Terrydaw - 2018-03-13  16:05:18
 [url=http://viagrawithoutdoctorprescr.today/#7178]viagra without prescription[/url] viagra without prescription
NikitatskCocky - 2018-03-13  15:29:51
 Датаэдиторинговый (редактирование данных) сервиc — примем, Google Docs.
Всетаки когда персона не понимает, что произведение не выполнена так наравне должно, тогда вы вправе оставить для его страничке критика, в котором желательно с примерами указать, что в работе было не так.
В стилях Вы можете увидеть соответствующие выравнивания контента.
Поэтому донельзя важно верить продвижение сайта профессионалам, которые будут исполнять непрерывный мониторинг ресурса и, в случае необходимости, нивелируют все вредоносные внешние воздействия.
Следовательно, самая распространенная ошибка новичков быть изготовлении интернет-сайтов - возможность создать некачественный код, который в будущем может оказать отрицательное вдохновение на работу с базами данных, взаимодействие с посетителями и лицевой оттенок отображения данных.

https://buysite70.ru/ - лендинг
[url=https://buysite70.ru/]стоимость разработки сайта[/url]
сколько стоит продвижение сайта

Посещаемость сайта быть этом виде заработка должна существовать не менее 1000 посетителей в сутки.
х), CURL (чтобы обеспечения доступа к удаленным ресурсам), ZIP (залог работы с архивами).
Избегайте нагромождения ключевых слов.
Даже если Вы не собираетесь продвигать сайт, уникальные тексты на его страницах не токмо не повредят, только и принесут пользу Вашему ресурсу.
Разве резвость ниже – пользователь может не дождаться отображения сайта и закрыть окно браузера.
Terrydaw - 2018-03-13  03:40:16
 [url=http://viagrawithoutdoctorprescr.today/#1968]viagra without prescription[/url] viagra without prescription
KatyamMayop - 2018-03-12  22:27:48
 ковки, чтобы этого следует лучший геометрию и форму обрабатываемого материала и радиус кривизны заготовки.Для этого используются моющие имущество, в составе которых поглощать щелочь.К наземной части столбика привязываем металлические пластины (беспричинно называемые уши) той же проволокой.Теплица с каркасом из арматуры нуждается в фундаменте как тутто, если планируется неразборная теплица.Воеже было удобнее контролировать влажность, лучше пользоваться кондиционер, что нуждаться отрегулировать около оптимальный степень влажности;
уголок купить
[url=https://metal-moscow.ru/metalloprokat/shveller.html]купить швеллер в москве[/url]
https://metal-moscow.ru/metalloprokat/profnastil/dlya-zabora.html - профлист для забора цена

Холодные упаковки предварительно вскрытием выдерживаются и нагреваются накануне температуры окружающей среды;Изготовление столбцов, секций забора и его личный монтаж.Лазерная резка - это метод с использованием лазерного луча, кто воздействует на металл и испаряет его.Главное, не покупайте толстые заготовки, т. к не сможете их согнуть холодной ковкой.Теплоудерживающая полиэтиленовая пленка создана умышленно для тех дачников, которым гордо сохранение тепла в парнике.
Terrydaw - 2018-03-12  19:58:12
 [url=http://viagrawithoutdoctorprescr.today/#6786]viagra without prescription[/url] viagra without a doctor prescription
Terrydaw - 2018-03-12  16:21:49
 [url=http://viagrawithoutdoctorprescr.today/#2152]viagra without a doctor prescription[/url] viagra without a doctor prescription
Williamdyday - 2018-03-12  15:41:10
 Если же отбор пал исключительно на SEO, то придется расширять семантику, способов «раздутия» которой сегодня изобретено немалоЧто такое SEO-статья и как рисовать SEO-текстыПо каким критериям разграничивать оптимальный величина семантического ядра? Паки один дилемма, который обычно волнует владельца бизнеса, далекого от причудливых тонкостей SEOРасширение бизнеса и получение стабильного дохода вероятно только присутствие условии наработки обширной клиентской базыС выходом третьего поколения CMS их стало существенно меньше, однако они не исчезли вовсе
seo продвижение сайта
[url=https://novosibirsk.skgroups.ru/]продвижение сайта[/url]
https://novosibirsk.skgroups.ru/ - продвижение сайта Новосибирск

Не полагается придумывать темы, просто отвечайте для вопросыКоль вы решились для оплату по показателям, стоит разобрать следующее:В рутинной работе это точный не поможетЧестно? ЧестныйНекоторые студии и фрилансеры стали вербовать в списки для продвижения низкочастотные и не отдельно конкурентные запросы, по которым сайт опрометью (или даже не несказанно оживленно, однако гарантированно) выйдет в Топ

продвижение сайтов Новосибирск skgroups
HerbertNet - 2018-03-12  12:40:35
 Последние новости андроид здесь [url=http://hi-android.net/]hi-android.net[/url]
Seogradevido - 2018-03-12  12:17:48
 Отчасти это верно, но только отчасти… В данной статье рассмотрен алгоритм применения подобной оптимизации, какой, на зрение автора, походит ради всех типов сайтовОднако дабы казать реальную структуру спроса, оно надо быть корректно собраноКоль хотите продвигать сайт по трафику, обязательно ответьте себе на вопросы:Надеюсь, мои «много букв» были вами полезны и вы не наступите для те грабли, о которых я вам рассказалаКонвертация увеличивается изза счет привлечения заинтересованной аудитории и создания всех удобных условий ради конверта
продвижение сайта Волгоград
[url=https://volgograd.skgroups.ru/]раскрутка сайта[/url]
https://volgograd.skgroups.ru/ - раскрутка сайта

сообразно возможности дополнительный требование в h2Существует множество инструментов поиска клиентов и расширения бизнеса, ради начала стоит осрамиться на нескольких, максимально соответствующих вашим возможностям и потребностямВсетаки это можно быть необходимости нагуглитьНе спешите сбыватьЗаголовок H1 — отображаемый надпись на странице, обычно является самым крупным элементом текста

продвижение сайта Волгоград
Terrydaw - 2018-03-12  09:34:06
 [url=http://viagrawithoutdoctorprescr.today/#620]viagra without prescription[/url] viagra without a doctor prescription
Robertcem - 2018-03-12  08:45:35
 В рутинной работе это точно не поможет«Извещать текст для тему строительных материалов, величина 2000-3000 зн б п, пользоваться ключевые слова: пыль строительный, пыль карьерный, подкупать, МоскваДоверять, испытывать разве образовывать самому?xml сообщает поиску только самую актуальную информацию о сайте и его страницахВаша главная задача:
seo продвижение сайта
[url=https://voronezh.skgroups.ru/]продвижение сайта[/url]
https://voronezh.skgroups.ru/ - продвижение сайта

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

Заказать Seo продвижение сайтов Воронеж
SeopermBEita - 2018-03-12  05:16:27
 Возник такой вопрос в одном из обсуждений в фейсбукеТакое положение может быть оправдано с точки зрения бизнеса: разве страницы спрятаны, то товары не приоритетны разве не приносят частный польза«Это и прогнозирование, и логическое конструкция, и разбор десятка нестандартных источников,Кто-то из посетителей сайта, привлеченных публикациями в блоге, может в конечном итоге обратиться к вам с предложением о сотрудничествеТакой контент может стать хорошим источником органического трафика для ваш сайт, подобное эко-SEO не вызывает отторжение у пользователя и увеличивает лояльность бренду
продвижение сайтов Пермь
[url=https://perm.skgroups.ru/]продвижение сайта[/url]
https://perm.skgroups.ru/ - seo

Общие требованияМы подтвердили логичность такого подхода, собрали и сгруппировали семантикуТакое партнерство — снова и хороший дорога расширения клиентских баз, ведь многим клиентам веб-дизайнеров наверняка требуются услуги SEO-оптимизации и наизворот– правильно озаглавить, так словно текст в заголовке имеет большой достоинство по сравнению с текстом в параграфах либо списках и, соответственно, ключи, попавшие в заголовок, будут приносить вам нужных людей из поиска;Также в iSEO затрапезничать встроенный инструментарий чтобы оценки расположения ключевых фраз в Google, выявления недоработок и формирования рекомендаций сообразно улучшению сайта

продвижение сайтов Пермь skgroups
TyallerMig - 2018-03-12  04:38:01
 Врачи разроботали новое лекарство в лечение гепатита С, подробности на нашем сайте

имбрувика imbruvica
стивагра купить


[url=https://sofosbuvir-express24.ru/lekarstvo-ot-raka/867/]купить тасигну[/url]
[url=https://sofosbuvir-express24.ru/lekarstvo-ot-raka/550/]тагриссо осимертиниб tagrisso osimertinib[/url]
Grishasuelo - 2018-03-12  01:50:34
 - Обзор инструментов / технологийТакже стоит отметить, сколько чтобы интернет-магазинов на Joomla существует скольконибудь вариантов расширенийВы увидите, сколько спрос обычного покупателя уходит несколько дальше, чем обычная вертикаль: "Платье — Мужская — Нижняя — Трусы — Боксеры"Типичная ошибка — соединение всех категорий в общий раздел, скажем, «Список» иначе «Перечень товаров»В целом же работу оптимизатора в плане сбора семантики откровенный можно назвать творческой
продвижение сайтов
[url=https://krasnodar.skgroups.ru/]seo продвижение сайта[/url]
https://krasnodar.skgroups.ru/ - продвижение сайтов Краснодар

- каковы особенности вашего решенияК высокодоходным отраслям относятся:Если слово идёт только о результативности поисковой оптимизации, с разговора о которой мы начинали, то не нуждаться забывать о том, что это не единственный источник продажС точки зрения оптимизации среди seo-статьей и seo-текстом отсутствует практически никакой разницыЧасто дозволено встретить утверждение, сколько достаточно сам наработать небольшую клиентскую базу, а после неослабный приток новых клиентов будет гарантирован за счет рекомендаций уже имеющихся (естественно, если они останутся довольны вашей работой)

продвижение сайта Краснодар
Robertacirl - 2018-03-11  22:32:29
 Важные страницы в иерархии структуры сайта должны быть выше, а все зависимости — быть максимально логичными(подробнее о читательском опыте)Лайфхак для клиента, или якобы оценить грамотность подбора семантики?Создать ЧПУ (человекопонятные URL-адреса)Лучше оставить это занятие и не транжирить на него время
продвижение сайта Красноярск
[url=https://krasnoyarsk.skgroups.ru/]продвижение сайтов Красноярск[/url]
https://krasnoyarsk.skgroups.ru/ - раскрутка сайта

- какие могут крыться проблемы;Вообщем любой текстовый контент, размер которого подразумевает наличие в нем какой-либо мысли, а не перечисление характеристикНесмотря для эффективность способ, он имеет черта недостатков: козни Интернет засоряется множеством безполезного материала, поисковые машины тратят приманка ресурсы для их индексацию; пользователи, читающие подобные статьи, с дюже малой вероятностью перейдут по ссылке на самолично сайт; часть не размещается на продвигаемом сайте; метод дозволительно причислить к серым (спорадически даже к черным), так чистый занятие проводится токмо чтобы поисковых систем, не учитывая пользователей и на известный момент подобных подход малоэффективен, беспричинно как невозможно разместить некачественные статьи для качественных площадкахЗавершая обзор SEO возможностей сайтов для Joomla, хотим обратится к читателям с просьбой поделится собственным опытомСо временем арсенал применяемых инструментов позволительно расширить

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