За целта ще съхраним съдържанието на въпроси и съответния отговор в база данни, а после ще ги извлечем по познат начин, чрез PHP. Нека опитаме.
Демо
секция FAQ
Отговори на Често Задавани Въпроси
MySQL
Стъпка 1
Стъпка 2
Стъпка 3
Стъпка 4
Резултат
PHP
connect.php
<?php
//DB константи
/* MySQL hostname */
defined('DB_HOST') ? null : define("DB_HOST", "localhost");
/* MySQL database username */
defined('DB_USER') ? null : define("DB_USER", "root");
/* MySQL database password */
defined('DB_PASS') ? null : define("DB_PASS", 123456);
/* The name of the database */
defined('DB_NAME') ? null : define("DB_NAME", "faq");
//съединение с MySQL
$id=mysql_connect(DB_HOST, DB_USER, DB_PASS) or die('No server connected');
//избор база данни
mysql_select_db(DB_NAME, $id) or die('No DB selected');
//хак на енкодинга
mysql_query('SET CHARACTER SET utf8', $id);
connect.php се явява конфигурационен файл. В него задаваме константи за съответния хост, име на потребител, парола и последно - име на база данни. Тези константи вкарваме в проверка преди да ги предадем на функцията за свръзка. Коментар над съответната константа е ориентир за приложението й. При чупене на енкодинга с кирилицата добавяме хак на ред 24.Извеждането на информацията от базата данни става посредством заявка в ред 2 на файл faq.php. Този файл можем да добавим, чрез функция include(); или впишем в html кода на нужното място за печатане.
Заявката се подава като параметър на функция mysql_fetch_assoc. Резултатът на функцията връща асоциативен масив, когото присвояваме на променлива $row. За пълно обхождане на полетата на таблицата вкарваме резултата в цикъл while. Краен резултат печатим с конструкция echo, когото стилизираме, чрез класове question и answer.
faq.php
<?php
$res = mysql_query('SELECT * FROM `faq`.`faq`' , $id);
while($row = mysql_fetch_assoc($res)){
echo '<div class="question">' .$row['question']. '</div>
<div class="answer">' .$row['answer']. '</div>';
}
?>
CSS
style.css
.question{
border: 1px solid #888;
background-color: #ccc;
padding-left: 10px;
margin-top: 5px;
text-decoration: underline;
cursor: pointer;
}
.answer{
border: 1px solid #ccc;
padding: 5px;
margin-bottom: 10px;
display: none;
}
Визията на секция FAQ поверяваме на изпитания CSS. Въпрос на импровизация и вкус у всеки дизайнер. Показания style.css e примерен. Задаваните въпроси ще гримираме с клас question, а техните отговори с клас answer. За да подскажем на потребителя, че въпросите са кликабелни добавяме свойства text-decoration и cursor с нужните им значения.Свойство display: none ще скрие отговорите по подразбиране, дошли от конструкция echo. Показът им ще доверим на jacascript.
jQuery
script.js
<script type="text/javascript" src="scripts/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$(".question").toggle(function(){
$(this).next().slideDown();
}, function(){
$(this).next().slideUp();
});
});
</script>
jQuery e framework на javascript. Идеята е, че се спестява писането на код, ако същото се изпълнява в чист javascript. Заобикалят се лесно проблемите с кросбраузността. В jQuery има заложени редица функции, които предават интерактивност на уеб-документа. Те са главна причина за този подход. Недостатък е допълнителното зареждане на библиотека около 80kB. В ред 1 включваме библиотеката. Редове 3 и 9 са стандартни за синтаксиса на jQuery. Ред 3 диктува стартиране на някаква анонимна функция едва след пълно зареждане на документа. Ред 4 захваща клас question към когото прицепва тригер/превключвател. Превключвателят се явява функция, която съдържа конструкция this. Конструкцията следи настъпващо събитие по класа, тоест клик с мишката. При настъпило такова javascript-интерпретаторът се обръща към следващия клас (next()), а това е клас answer. Клас answer пада под управлението на функция slideDown() и настъпва отваряне - ефект акордеон. В обратен ред по същата схема се затваря answer от функция slideUp(). Функции slideDown() и slideDown() могат да получават параметър в милисекунди и така да ускоряваме или забавяме ефекта.
Това е всичко. Лесно и просто.
Source Code
faq.php
<?php
defined('DB_HOST') ? null : define("DB_HOST", "localhost");
defined('DB_USER') ? null : define("DB_USER", "root");
defined('DB_PASS') ? null : define("DB_PASS", "");
defined('DB_NAME') ? null : define("DB_NAME", "faq");
$id=mysql_connect(DB_HOST, DB_USER, DB_PASS) or die('No server connected');
mysql_select_db('faq', $id) or die('No DB selected');
mysql_query('SET CHARACTER SET utf8');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="bg" lang="bg">
<head>
<title>FAQ</title>
<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
<style type="text/css">
.question{
border: 1px solid #888;
background-color: #ccc;
padding-left: 10px;
margin-top: 5px;
text-decoration: underline;
cursor: pointer;
}
.answer{
border: 1px solid #ccc;
padding: 5px;
margin-bottom: 10px;
display: none;
}
</style>
<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js' type='text/javascript'></script>
<script type="text/javascript">
$(document).ready(function(){
$(".question").toggle(function(){
$(this).next().slideDown();
}, function(){
$(this).next().slideUp();
});
});
</script>
</head>
<body>
<div id="page">
<h1>секция FAQ</h1>
<p>Отговори на Често Задавани Въпроси</p>
<?php
$res = mysql_query('SELECT * FROM `faq`.`faq`');
while($row = mysql_fetch_assoc($res)){
echo '<div class="question">' .$row['question']. '</div>
<div class="answer">' .$row['answer']. '</div>';
}
?>
</div>
</body>
</html>
Source Code e показан в качеството на учебно средство. Копирайте го в редактор. Съхранете го под faq.php. Качете го в директорията на Apache. Конфигурирайте в първите редове вашите настройки за връзка към база данни. Копирайте "phpMyAdmin SQL Dump" от секция MySQL приложен в спойлера. Импортирайте базата. Готово. Имате акордеон на локалния сървър, когото може да доразвиете според вашите нужди.
до нови срещи ^.^





Разузнаването у нас работи добре, благодарение на което идвам да подложа едно рамо за подкрепа. Лека казарма, което включва и хубава храна, разбира се :)))
Кога влизаш за изпълнение на дълга към народа?
И Честита Нова Година :)
Благодаря, благодаря. Радвам се, че разузнаваш. Това разузнавачките сте охооо. Честита и на теб, да си жива и здрава и все да ти е сладка годината. Ядем ябълки с мед по случая, риба задължителни и вино. Хайде и умната или русата.