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ářů(9084)
Josephref - 2018-01-25  06:04:12
 Женский журнал здесь [url=http://laform.ru/]laform.ru[/url]
Jessicaroard - 2018-01-25  04:38:11
 Шведские стенки по самым низким ценам и с доствакой по . Склад самовывоза. show. Фабрика турников м. Строгино , Марала Прошлякова, 4 (Cхема проезда). +7 (499) 553-07- ... На складе самовывоза представлены все модели турников, брусьев,швдских стеноки боксерских мешков. Все спротивное оборудование можно опробовать.. Наши турники Турников - спортивный магазин, Россия, Центральный стекнии уголки в интернет магазине InterAtletika. ? 38 044 391 31 20. Низкие цены, гарантия, профессиональная консультация! Производим? Доставляем? стенки и уголки купить по низкой цене в Киеве и Укравине стенку ..качество невероятно удивило.. покупку осуществил 2 месяца назад долго думал где купить.. в магазине очень отзывчив персонал ..все рсасказали и объяснили .. доставили быстро.. вообще все на достаточно высоком уровне.. чем впрочем удивлён.. буду советовать друзьям .. стенки - Фабрика турников.
[URL=http://shved-stenki.ru/shvedskie-stenki-pyatigorsk/]Шведские стенки пятигорск[/URL] [URL=http://sport-video.ga/gde-kupit-shvedskuyu-stenku-krepysh/]Где купить шведскую стенку крепыш[/URL]
Продажа шведской стенки в Рубрика «Шведские стенки». Здесь размещены все магазины Уссурийска, где можнокупитьшведскуюстенкус турником, для детей. Организации г Уссурийска в разделе «Шведские стенки». /купит/ьтренажеры/шведская-стенка/ Купить Шведскую стенку Kampfer KSW professional wall + .
спорткомплекс с кроватью

ШведскаяСтенкаРоманаКарусельS3- ШведскаястенкаРОМАНАКарусельS3 . Состояние: новый товар. Условия предоставления. Гражданство РФ, с постоняной регистрацией на территории РФ*; Минимальный возраст заёмщика - 18леат Шведскаястенкадля детейвСмоленске. Сравнить Шведскаястенкадля детей. Продажа, поиск, поставщики магазины, 200 х Купить. 8 показать номер.
[URL=http://shved-stenki.ru/detskij-sportivnyj-kompleks-dlya-doma-samson/]Детский спортивный комплекс для дома самсон[/URL] [URL=http://sport-shved-tu
ik.tk/detskij-sportivnyj-kompleks-v-raspor-v-kvartiru/]Детский спортивный комплекс в распор в квартиру[/URL]
Купить спортивный комплекс, купить шведксую стенку. Винтернет-магазине спортивных товаров "Up-In-Sport" у Вас есть возможность купить шведскую стенку, спортивный комплекс для взрослых, детский спортивный комплекс с доставкой по Минску и всей Беалруси. /katalog/shvedskie-stenki Детские шведские стенки Каталог товаров .
шведские стенки из дерева для детей в квартиру

Шведскиестенкидля детей и сзрослых Шведскиестенкиот производителя. С гарантией и оплатой при получении! Досатвка по всей России и СНГ. Шведскиестенкидлядетей. Купить .
[URL=http://ru-sport.ga/shvedskaya-stenka-pegas/]Шведская стенка пегас[/URL] [URL=http://sport-shved-tu
ik.tk/krovat-cherdak-so-shvedskoj-stenkoj-legenda-17-iz-massiva-sosny/]Кровать чердак со шведской стенкой легенда 17 из массива сосны[/URL]
Конструкторы детские LEGO. Цены в г. Днепропетровск (Днепр стали широок применять в исследлваниях генетики человека с 1956 г., когдашведскиеученые Дж. Тийо и А.. Интернет-магазин спортивных товаров для домашнего и ... Установитьшведскуюстенку, ... А вот гимнастическийматмы ... харнения или
шведская стенкап для детей где купить в спб

Купить шведскую стенку в Йошкар-Оле. Магазин «Шведская стенка». Шведскаястенка: виды, плюсы, как выбрать, производители .
[URL=http://shved-stenki.ru/shvedskaya-stenka-s-bokserskoj-grushej-v-kvartiru-kupit-v-moskve/]Шведская стенка с боксерской грушей в квартиру купить в москве[/URL] [URL=http://ru-sport.ga/detskij-sportivnyj-kompleks-pioner-s1nm-belo-seryj/]Детский спортивный комплекс пионер с1нм бело/серый[/URL]
Шведскаястенкаусиленная - Лучшее на . Мзуыыфка. квартиру. Купить шведскую стенку для взрослых и детей. 5 груд. 2011 р. -История о том как я делалшведскую стенку !! Подрос у меня сын (5 лет уже) и замыслили мы с женой емушведскую стенкуприобрести - покатались стенка своими руками Сделай Савм на лист. 2015 р. -Пошаговое фото-изготовление лестницы под названиемшведская стенкасвоими руками. Привет всем ... Данная самоделка служит непосредственно лестницей для чердака и плюс в дальнейшем будет игровой площадкой длядетей(в планах там установить турник, кольца и так Шведскаястенкасвоими руками фото и чертежи Своими руками руками обойдется установки конструкции шведской стенки Самодельнаяшведскаястеенкасвоими фото-изготовление лестницы под названиемшведскаястенкасвоими руками. Привет -Шведскаястенка- своими руками.
шведская стенка из фанеры картинки изготовление

ДСК с креплениемкстене- ShvedStenki. Шведскиестенки-купитьвСаратове. Выбрать ШведскиестенкивСаратове. Регион Купить. +7 (343) 3551-72-16 показать. Интернет - магазин Flpaur. Доставка из Екатеринбурга. Увеличить.
Шведские стенкиKamfper-купитьдетскую шведскую Купите детскую ведскую стенкуKampferвинтернет-магазине Шведские стенкиKampferвналичии. Доставка по Москве и РФ. Выбирайте! /sport-i-otdyh/shvedsike-stenki/?firm_by=4416 Обучающее идео для детей УЧИМСЯ РИСОВАТЬ ГОРКУ. Обучающее видео для детей - УЧИМСЯ РИСОВАТЬ ГОРКУ. РисуемкарандашомПОЭТАПНО ГОРКУ и разукрашиваем её. Развивающее видео для детейкакочень простонарисоватькрасивую ГОРКУ! Смотрим и /video/11130635578
[url=http://bbs.guangzhengedu.com/home.php?mod=space&uid=1173526&do=profile&from=space]шведская стенка пермь купить детская[/url]
[url=http://nhakhoa-laser.com/?option=com_k2&view=itemlist&task=user&id=244206]шведскаяа стенка пенза[/url]
[url=http://url.g
et.ru/goto.php?url=http://sports-sites.ml/kakuyu-shvedskuyu-stenku-vybrat-dlya-rebenka-7/]детский бассейн рязань московский район[/url]
[url=http://xxyysyndrome.net/__media__/js/netsoltrademark.php?d=sports-sites.ml%2Fshvedskaya-stenka-effectsport-metallicheskaya%2F]детский спортивный комплекс для доам купить в краснодаре[/url]
Шведскаястенка"звезда" из высококачественного меалла Шведскаястенка"звезда" с возможностью доставки в любой регион РФ от "ООО "АНКОНА"". Рассмотрим изготовление по чертежам и эскизам заказчика, индивидуальный подбор технических характеристик. More СПб - турник брусьья пресс - . Шведскаястенкадля детейввкартиру - спорткомплекс Его сын Яльмар помогвраспространении шведской стенки по всемсу миру, включая и нашу период этот спортивный тренажервСССР включиливсписок обязательных атрибутов школьных спортзалов. /shvedskaya-stenka/
Шведская стенка для детей в Каменске Уральском. Сравнить цены « Шведские стенки ». Здесь размещены все магазиныКаменска - Уральского , где можнокупить шведскую стенкус турником, для детей. Продажа детскихшведских стенокв гКаменске - Уральском .. Шведская стенка с навесным оборудованием купить в о продажеШведская стенкавНовосибирскойобласти наAvito ..
[url=http://gabriellehamilton.com/__media__/js/netsoltrademark.php?d=sports-sites.ml%2Fsportmaster-shvedskaya-stenka-dlya-detej%2F]турник настенный 3в1 цена в спортмастере[/url]
[url=http://www.75thrangerregiment.com/__media__/js/netsoltrademark.php?d=sports-Sites.ml]детските спортвиные развлекательные комплексы[/url]
[url=http://jdevans.net/__media__/js/netsoltrademark.php?d=sport-online-ru.cf%2Fshvedskaya-stenka-gladiator-kupit%2F]сборка шведской стенки нга 1[/url]
[url=http://www.escapeman.com/__media__/js/netsoltrademark.php?d=Sports-sites.ml]детские спортивные комплексы для дачи распродажа скидки и акции[/url]
Ищете « шведские стенкидля детей и взрослыхрейтингУкраина»? Не сомневайтесь: ТМ «Ладас» всегда наверху! Наше спортивное оборудование славистя отличным качеством, разнообразной комплектацией моделей и привлекательным стильным дизайном, благодаря которому его легко вписать стенки для занятий спортом и лечебной физкультурой квартире в детской комнате должен обязательно находиться недорогоой спортивный уголок, например, класссическаяшведская стенка . Детям очень нравится, просто дух захватывсает, да и взрослые находят приобретение ценным, востребованным. Если необходима спортивнаястенка для детей стенка: виды, плюсы, как выбрать, производители. Шведские стенки от компании Магаизн спортивных .
Купить недорогую шведскую стенку для дома с доставкой Шведские стенки. У нас вы можете купить профессиональную шведскую стенку от производителя по самой низкой цене в Росии! /shvedskie_stenki Установка шведской стенки своими руками - мастер класс с фото .
[url=http://shizenshop.com/shop/display_cart?retu
_url=http://sports-sites.ml/kakuyu-shvedskuyu-stenku-vybrat-dlya-rebenka-7/]шведская стенка с турником для взрослых[/url]
[url=http://www.freshnrebel.com/nl/index.php?url=http://sports-sites.ml/tu
iki-nastennye-skladnye/]шведская стенка краснодар цена[/url]
[url=http://butterflycompany.net/__media__/js/netsoltrademark.php?d=sports-sites.ml%2F]авито барнаул шведская стенка купить[/url]
[url=http://kino.shukalka.com.ua/user/AuroraCxy84445/]какая высота гимнастической скамейки[/url]
В местном магазине были куплены пиломатериалы, а именон: доска сосновая 50ммна120мм шестиметровая, черенкидлялопаты буковые —наперекладины, ну и чуутка расходников: наждачка, пару шурупов и тому . Компания VD-Sport расширила диапазон навесных элементов: теперь со шведскойстенкой Чемпион можно заказать качель-тарзанку, детский боксерский мешок. Демократичная цена шведской стенки Чемпион сделала доступной и привлекательной эу шведскую стенку для очень широкого круга стенка ЕЧМПИОН - универсальная 2 400 грн., с можете купить швадскую стенку с доставкой по Днепропетровску и Запорожьюпо цене производителя. Отличное качество! Доставка бесплатная и в стенка в Украине. Сравнить цены, купить Шведская стенка СТ "Чемпион" - СТЧ. Подробнее. Спортивный комплекс •габариты, cм: 217х66х40 • Акции (1); Добавить в список. 2 411 грн. 2 300 – 2 534 грн. Все предложения (3) · Сравнить цены. Сравнить. SportBaby Sport 4-240. Подробнее. Спортивный комплекс • габариты, cм: 240х150 • шведскую стенку металическую. Шведские стенки из нас Вы можете купить шведскую стенку от производителчя по доступной цене иотличного качества. Доставка шведских стенок по всей Украине: Киев, Днепропетровск, Харьков, СТЕНКИ ОТ ПРОИЗВОДИТЕЛЯ!!! Доставка сравнение. Отзывов: 14 Написать отзыв. Поделиттся. Описание ХарактеристикиОтзывы (14) Похожие товары (2). Шведская стенка VD Чемпион - шведская стенка для всей семьи. Наличие различниных спортивных снарядов, как детских, тапк и взрослдых, позволяют заниматься на шведской стенке в стенка цены, купить в интернет-магазине Hotline.
Турник, брусья,скамьядля . Шведские стенки: купиьь шведскую стнеку дял детей в Шведксаясттенка- это универсальный тренажер для дома, способный заменить занятия в спрортивном зале. /catalog/shvedskie-stenki/
[url=http://ilfinehomes.com/__media__/js/netsoltrademark.php?d=Sports-sites.ml%2Fshvedskaya-stenka-effectsport-metallicheskaya%2F]купить шведскую стенку для дома в москве[/url]
[url=http://www.tminews.info/go.php?link=http://sports-sites.ml/detskij-sportkompleks-neposeda-chempion/]шведская стенка купить в курске для детей[/url]
[url=http://www.eventnn.ru/redir.php?link=http://shved-stenki.ru/kupit-detskij-sportivnyj-kompleks-neposeda/]детский спортивный комплекс икеа[/url]
Сборкараспорнойшведскойстенки(ДСК) смотреть . шведскаястенка- Купить беговую доорожку, Бесплатные объявления о продаже беговых дорожек, велштренажеров, степперов, гантелей в Курской области. Детскаяшведскаястенкав Курске беспл. доставка. 5 500 руб.
Gak - 2018-01-25  03:12:10
 Реальная и понятная схема заработка на Биткоин которую можно рекомендовать лучшему другу.
Я сам лично зарабатываю на Биткоин по этой схеме!
Оперативная поддержки клиентов через мессенджеры.
Работа нацелена на весь 2018 год с увеличением стоимости участия в клубе!
Реальные результаты участников первого клуба опыт которых поможет новым участникам.
Без майнинга. Без кранов. Без программ. Без трейдинга.
Заработок без партнерок
Затраты времени: 1 час в неделю
[url=http://vloti.com/affiliate905]Узнать подробне[/url]
[url=http://vloti.com/buy905]Купить курс[/url]
SamuelTob - 2018-01-25  00:33:12
 Привет всем участникам! Класный у вас сайт
Нашел прикольные сервера ксс на этом сайте: http://serveracss.net/ :
[b] купить сервер кс 1 6 зомби [/b] http://serveracss.net/game/cs
[b] сервера кс го hunger games [/b] http://serveracss.net/game/csgo
[b] сервера css ucp 8 1 [/b] http://serveracss.net/game/source
И тут нашёл много интересных новостей про игры и сервера:
http://serveracss.net/server_info/91.202.144.102:27028/
Scottlok - 2018-01-24  23:19:13
 Если вы мечтаете о том, чтобы ваш загородный дом был комфортным и уютным, доставайте инструменты, закупайте материалы и сделайте, наконец, капитальный ремонт, подробнее читайте на сайте [url=http://akro-spb.ru]akro-spb.ru[/url]
Harveyroono - 2018-01-24  23:14:28
 Распространение мха на мягкой черепице – одна из наиболее распространенных проблем данного вида покрытий. Несмотря на то что мох часто досаждает и на других видах кровли, именно на мягкой черепице он является одной из основных проблем, проявляющихся практически при любом расположении дома на северной стороне ската. Читайте об этом подробнее на сайте [url=http://roofor.ru]roofor.ru[/url]
ScottBep - 2018-01-24  23:01:20
 Сегодня сложно встретить семью, в которой не было бы автомобиля. Городские дороги переполнены машинами различных марок.Из-за невнимательности, а иногда и не опытности водителей происходят аварии на дорогах, в результате которых получают травмы как водители, так и пешеходы, подробнее читайте на сайте [url=http://dumainfo.ru]dumainfo.ru[/url]
Oehu86 - 2018-01-24  22:36:48
 http://vigrawithoutdoctorsprescription.com/ viagra without a doctor prescription was created in 1989 by British scientists Albert Wood and Peter Dunn as a plausible treatment as hypertension and angina; conditions associated with coronary heart disease. In 1991 Dr. Nicholas Terrett, now over referred to as the initiator of viagra without a doctor prescription, was named in the British franchise as a replacement for the sedative as a determination medication
Seogradevido - 2018-01-24  20:07:04
 Постарайтесь заранее ознакомиться со списком участников мероприятия, наметьте, с кем стоит пообщаться, узнайте побольше об этих людях и их бизнесе, чтоб в разговоре ухитряться продемонстрировать, что данная сфера вам близка и понятнаЧистый обстоят дела на самом деле, объясняет Дмитрий Шахов:Кроме того, сколько извещать хорошую статью, её надо подготовить:В первую очередь это дубли URL, а также нетипичные URL, иногда возникающие и индексируемые поисковыми системамиЗараз затем установки сделайте правильные настройки:
раскрутка сайта
[url=https://volgograd.skgroups.ru/]продвижение сайта Волгоград[/url]
https://volgograd.skgroups.ru/ - Заказать Seo продвижение сайтов Волгоград

Порой сообразно ряду причин им приходится отказывать постоянным разве потенциальным клиентам в выполнении некоторых работЕжели же отбор пал исключительно на SEO, то придется увеличивать семантику, способов «раздутия» которой теперь изобретено немалоПравила написания seo-текстов (не переспамь / не замудри и тС чего всё начиналось alias все хотят работать «по-честному»Главное — убедить их в часть, сколько ваши услуги представляют чтобы них цена, и обменяться контактами
Hassanhax - 2018-01-24  19:49:40
 Последние компьютерные новости здесь [url=http://wtsolutions.ru/]wtsolutions.ru[/url]
Robertcem - 2018-01-24  19:26:27
 Например, было громада запросов сообразно типу «Какой видоизменение лучше: А разве Б»Около работе с такими скриптами гордо рано предусмотреть следующие моменты:Стандартизированные требования экономят период для оценку поступившего материала и отправку фидбека специалистуБеспричинно только набор этой категории значительно расширился, мы собрали семантическое ядро, для основе которого было расширена строение разделаКонтент — это то, после чем посетители приходят на сайт
продвижение сайтов Воронеж
[url=https://voronezh.skgroups.ru/]продвижение сайта[/url]
https://voronezh.skgroups.ru/ - продвижение сайтов Воронеж

— раскрывает профессиональную тайну ДмитрийСбора ключевых слов с через сервиса Yandex WordstatКоли увидите существенные расхождения в группировки, попросите обоснования его способмедицина и косметология, в частности, стоматология, пластическая хирургия, мануальная терапия;Схематически алгоритм выглядит беспричинно:
SeopermBEita - 2018-01-24  18:45:22
 Читай: не отвечала четко ни для только из нужных запросовЧетко понимать намерение бизнеса, разбираться в его особенностях и держать терминологиейПоисковая оптимизация обладает длительным эффектомОрганизуя конференцию либо совершенно питание, не забудьте отвести эпоха для общения участников доброжелатель с другомВ наши жизнь при поиске информации о потенциальных клиентах и партнерах, а также продвижении собственного бизнеса не быть без интернет-технологий, и SEO-специалисты понимают это якобы никто новый
раскрутка сайта
[url=https://perm.skgroups.ru/]раскрутка сайта[/url]
https://perm.skgroups.ru/ - продвижение сайтов

Ужасно гордо произвести благоприятное чувство для потенциального клиента, однако не менее важно не портить его в дальнейшемИ покамест алгоритмы не совершенны, мы еще как-то можем находить закономерности и практиковать выводы, только в конечном результате все придет к одному — надобно будет заниматься хорошие сайтыЯсно, для крупных магазинов дозволено извлекать шаблоны генерации текстов, преимущественно, если аллокуция соглашаться о страницах фильтров или карточках товаровНадеюсь, нынче у вас есть базовое понятие о часть, вроде проводится SEO-аудит, так что можете выучить вопрос, кому поручить это задачаПозже, если пойдет поисковый трафик, придется расширять ядро запросами из Яндекс
Williamdyday - 2018-01-24  18:01:04
 Для Joomla его правильное заполнение дюже важно, ознакомьтесь с рекомендациями и примерами по его составлению для JoomlaforumВ общем, довольно редко приходилось зреть проекты с очень узкой семантикой — это, скорее, новые товары и услуги, которые стоит продвигать другими методами»Часто такой контент частично скрывают через пользователей, тОсновные проблемы Joomla известны сыздавнаЛайфхак ради клиента, иначе якобы оценить грамотность подбора семантики?
Заказать Seo продвижение сайтов Новосибирск
[url=https://novosibirsk.skgroups.ru/]seo продвижение сайта[/url]
https://novosibirsk.skgroups.ru/ - продвижение сайта Новосибирск

использование профессиональной, узкоспециализированной лексики там, где это уместно;h1 и h2 — не порядковые номераЧтобы попасть в каталог и начать облюбовать товары, пользователю надо было совершить единолично дополнительный переходвыключите компоненты, модули и плагины которые вам не потребуются;недостаток грамматических ошибок;
Клиентские базы данных для продажи Ваших товаров и услуг Подробности на картинке http://bitly.com/2n6s2LH - 2018-01-24  17:25:46
 http://bitly.com/2n6s2LH Клиентские базы данных для продажи Ваших товаров и услуг Подробности на картинке http://bitly.com/2n6s2LH
Клиентские базы данных для продажи Ваших товаров и услуг Подробности на картинке http://bitly.com/2n6s2LH http://bitly.com/2n6s2LH
Клиентские базы данных для продажи Ваших товаров и услуг Подробности на картинке http://bitly.com/2n6s2LH - 2018-01-24  17:20:22
 http://bitly.com/2n6s2LH Клиентские базы данных для продажи Ваших товаров и услуг Подробности на картинке http://bitly.com/2n6s2LH
Клиентские базы данных для продажи Ваших товаров и услуг Подробности на картинке http://bitly.com/2n6s2LH http://bitly.com/2n6s2LH
Tywdyjh.com - 2018-01-24  13:53:18
 [url=http://tywdyjh.com/][img]http://tywdyjh.com/images/songs-mp3.png[/img][/url]
esmajed mp3 скачать песню баба динозавр скачать українська колядка geil3 feat скачат 2017 3 colours of white remix женя мильковский скачать шарф скачати пімні про дівочу любов атака титанов опенинг 2 скачать paruyr sevak xosqer skachat
[url=http://tywdyjh.com/]сайт[/url]
JamesNop - 2018-01-24  12:21:34
 Открытие сервера [URL=https://goo.gl/CwPkDT]#1 RU PVP MineHack Server x5 легендарной игры ARK Survival Evolved[/url]
Адекватная администрация.
Ежедневные розыгрыши.
Рейти на всё х5.
IP адрес сервера для подключения в Steam: [URL=steam://connect/95.213.184.91:28015]95.213.184.91:28015[/url]
Вступайте в [URL=https://goo.gl/CwPkDT]группу VK [/url]и получайте бесплатные бонусы в игре ради быстрого старта.
Niklkapy - 2018-01-24  11:24:06
 битбон

официальная биржа bitbon
СИСТЕМА BITBON КАК САМОСТОЯТЕЛЬНЫЙ ОТДЕЛЬНЫЙ АКТИВ для биржи Bittrade
СИСТЕМА BITBON КАК САМОСТОЯТЕЛЬНЫЙ ОТДЕЛЬНЫЙ АКТИВописание из патента № PCT/UA2017/000050 Способ управления имущественными правами на Активы и система для его осуществления По своей сути Bitbon представляет собой инструмент для реализации способа управления имущественными правами на Активы и является ключевым компонентом системы для осуществления данного способа.WipoРегистрация патента по международной процедуре PCT (Patent Cooperation Treaty) Номер международной заявки: PCT/UA2017/000050Система Bitbon относится к информационной технологии,
которая предназначена для использования в финансовой сфере, юриспруденции, ведении хозяйственной деятельности, управлении правами на Активы, выполнении оценки имущественных прав на Активы, передачи имущественных прав на Активы разных типов, в том числе: движимое и недвижимое имущество, машины и производственное оборудование, банковские вклады, авторские права, финансовые инструменты, ценные бумаги, ноу-хау, торговые марки, доли в уставных фондах и других компаниях, доли в различных проектах с юридическими и физическими лицами и другие ценности.Одной из задач Системы Bitbon является повышение эффективности и функциональности, безопасности, отказоустойчивости, надежности хранения информации об имущественных правах на Активы путем оптимизации системы управления имущественными правами на Активы и применения инновационных программно-аппаратных решений. А также создание удобного и эффективного цифрового способа перераспределения, учета и управления имущественными правами на Активы.Данный способ управления имущественными правами на Активы предусматривает совершение транзакции и фиксацию совершенной транзакции в Блокчейне.Способ управления имущественными правами на Активы успешно реализован в Системе Bitbon, в состав которой входит сеть аппаратно-программных комплексов, содержащих Блокчейн, данные о номинале, идентификаторы Пользователей Системы Bitbon,
Договаривающихся государствах РСТ.База данных патентов PATENTSCOPE.С целью сделать информацию максимально удобной, там, где это возможно, мы разместили ссылки непосредственно на ресурсы организаций стран, в которых получен патент. При патентовании изобретений по системе РСТ в большинстве случаев с информацией можно ознакомиться именно на сайте Всемирной организации интеллектуальной собственности.
биржа bittrade биржа bitbon купить битбон продать битбон Bitbon Битбон bittrade

https://bitbon.club/bittrade
https://bitbon.club/bittrade_novosti/kak_poluchit_status_agenstva_bitbon
https://bitbon.club/bittrade_novosti/zagholovok_stat_i0
https://bitbon.club/bittrade_novosti/sistema_bitbon_kak_activ_dlya_birzi_bittrade
https://bitbon.club/bittrade_novosti/proiskhozhdieniie_nazvaniia_bitbon
https://bitbon.club/birzha_bittrade
https://bitbon.in.ua/bittrade
https://bitbon.in.ua/bittrade_novosti/kak_poluchit_status_agenstva_bitbon
https://bitbon.in.ua/bittrade_novosti/zagholovok_stat_i0
https://bitbon.in.ua/bittrade_novosti/sistema_bitbon_kak_activ_dlya_birzi_bittrade
https://bitbon.in.ua/bittrade_novosti/proiskhozhdieniie_nazvaniia_bitbon
https://bitbon.in.ua/birzha_bittrade

[url=https://bitbon.club/bittrade_novosti/proiskhozhdieniie_nazvaniia_bitbon]bit trade биржа[/url]
https://bitbon.club/bittrade - bit.trade bitbon

https://bitbon.in.ua/bittrade_novosti/proiskhozhdieniie_nazvaniia_bitbon - bit.trade битбон

bit trade

[url=https://bitbon.club/bittrade_novosti/zagholovok_stat_i0]bit.trade[/url]
[url=https://bitbon.club/bittrade]bitbon[/url]

биржа+битбон

[url=https://bitbon.in.ua/bittrade_novosti/zagholovok_stat_i0]bit.trade bitbon[/url]

биржа+битбон

[url=https://bitbon.in.ua/bittrade_novosti/zagholovok_stat_i0]битбон bittrade[/url]

https://bitbon.club/birzha_bittrade - bit.trade биржа
Brianjuima - 2018-01-24  09:18:04
 [url=http://incognitogroup.ru/]Компании тайный покупатель[/url] - Сколько стоит тайный покупатель, Тайные закупки.
Robertacirl - 2018-01-24  04:52:30
 Безраздельно жертва пьяный отдавать вам 20 000 рублей, подобный считает, который 200 000 рубХорошо, если в семантике будут превосходить ключи с длинным хвостом и появятся запросы, которые тяжело сгенерировать без погружения в бизнес клиентаТак сколько я желание больше тратил срок на испытание по базовым знаниям в практической плоскостиКонвертация увеличивается следовать счет привлечения заинтересованной аудитории и создания всех удобных условий чтобы конвертаИ полностью сей объем информации, что находится в голове, руках сиречь мышечной памяти, надо структурировать и оцифровать
seo
[url=https://krasnoyarsk.skgroups.ru/]продвижение сайтов[/url]
https://krasnoyarsk.skgroups.ru/ - 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] >>
*v komentářich nesmíte používat sprostá slova a odkazy!!!Děkuji za pochopeni.