17 ноября 2013
4037
динамические метки, backend

Динамические метки BackEnd

PHP
Демонстрация » Скачать »

И снова, здравствуйте! Данный урок является продолжением первой части динамических меток FrontEnd. В нем мы доведем скрипт, представленный в предыдущей части урока, до полной работоспособности. Начнем мы с добавления тегов в базу данных  и сохранения текущего состояния списка с тегами. Для начала подключение к базе данных, которое осуществляется в файле db.php:

 

$engine = 'mysql';
$host = 'localhost';
$database = 'tags';
$user = 'root';
$pass = '';

 
$dns = $engine.':dbname='.$database.";host=".$host;
$db = new PDO( $dns, $user, $pass );

 

 

Сама база состоит из двух таблиц: теги, где записаны все вводимые теги, и таблица, в которой сохраняются все введенные в последний раз теги. Имена этих таблиц tags и field , соответственно.

Ниже представлен файл, который сохраняет введенные значения.

 

include_once './db.php';

// отчистка таблицы от предыдущих записей

$db->query('TRUNCATE TABLE field');

// перебираем все введенные теги

foreach($_POST as $item)

{

         $sth = $db->prepare("SELECT id FROM tags

WHERE name = :name");

         $sth->execute(array('name'    =>     $item));

         $result = $sth->fetchColumn();

         // если тег не использовался ранее сохраняем его в базу

if(!$result)

         {

                   $sth = $db->prepare("INSERT INTO tags

(name) VALUES (:name)");

                   $sth->execute(array('name'    =>     $item));

                   $result = $db->lastInsertId();

         }

         // сохраняем текущие значения

         $db->query("INSERT INTO field (tag_id)

VALUES ('".$result."')");
}

 

Также в данном примере используется плагин jQueryUI Autocomplеte (авто заполнение). Для выдачи результатов для авто заполнения этим плагином создаем следующий файл

 

include_once './db.php';

$term = '%'.$_GET['term'].'%';

// запрос на поиск записи с вхождением строки

// переданной плагином ($_GET['term'])

$query = "SELECT name FROM tags

WHERE name LIKE :term";

$sth = $db->prepare($query);

$sth->execute(array('term' =>          $term));

$result = $sth->fetchAll();

// запись в строку спец. Формата для возврата плагину

$ansver = "[";

$i = 1;

foreach ($result as $row)

{
         $ansver .= '"'.$row['name'].'"';

         if($i != count($result))

         {
                   $ansver .= ", ";
         }

         $i++;
}

$ansver .= "]";

echo $ansver;

Теперь можем перейти к javascript коду, который был добавлен для связи с сервером и обменном данными с базой данных:

 

// при нажатии кнопки «сохранить» считываем все текущие теги

// и отправляем серверу для сохранения

$('button').on('click', function(event){      

         var tags = '';

         $('.tag>span').each(function(index){

                  tags += index + '=' + $(this).text();

                  if(index != $('.tag>span').length-1) tags += '&'; 

         });

         $.ajax({

                  type: 'post',

                  data: tags,

                  url: 'save.php'

         });

});

 

// функция, которая будет вызвана при выборе тега

// во время авто заполнения

function select (event, ui)

{

         event.preventDefault();

         $('.tag-input').val('');

         $('.tag-new').before('<li class="tag"><span>'

+ ui.item.value + '</span><a><span></span></a></li>');   

}

// подключение плагина autocomplete

$('.tag-input').autocomplete({

source: "search.php",

minLength: 2,

select: select

});

 

 

Напоследок рассмотрим изменения, внесенные в код поля с тегами предназначенные для вывода предварительно введенных значений:

 

<?php

include_once './db.php';

 

// получение из базы имен тегов

$sth = $db->prepare("SELECT t.name FROM tags t INNER JOIN field f ON t.id = f.tag_id ORDER BY f.id");

$sth->execute();

$result = $sth->fetchAll();

?>

 

<ul class="tags">

<?php foreach($result as $row): ?>

         <li class="tag"><span>

<?phpecho $row['name']; ?>

</span><a><span></span></a></li>

<?php endforeach; ?>

         <li class="tag-new">
                   <input type="text" maxlength="10" class="tag-input">
         </li>
</ul>



<button>Сохранить</button>

 

 

На этом вторая часть урока по созданию динамическим меткам завершена. Благодарю за внимание!