Доброго времени суток. Занялся изучением javaScript. И вот решил написать следующую штуку:
show/hide для текста который хранится в базе данных. Изначально мы не знаем сколько записей у нас в таблице и все нужно делать через цикл.
Таблица базы:
Код:
|
CREATE TABLE `ben` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`post` longtext NOT NULL,
`bentitle` varchar(255) NOT NULL,
`benpost` longtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=cp1251; |
"post" - просто текст который пишется перед скрываемым,
"bentitle" - название услуги(собственно по нажатию которой и должен разворачиваться скрытый текст)
"benpost" - описание услуги(show/hide текст)
config.php:
<?php
$db_host = 'localhost';
$db_user = 'root';
$db_pasw = 'Angelbk';
$db_name = 'syit2';
// Соединяемся, выбираем базу данных
$db_info = mysql_connect($db_host, $db_user, $db_pasw) or die("Could not connect : " . mysql_errno() . " " . mysql_error());
mysql_select_db($db_name, $db_info) or die("Select database not successfull : " . mysql_errno() . " " . mysql_error());
?>
funct.php:
<?php
require_once("config.php");
//указываем нужную кодировку
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");
function gettable($tablename) //функция которая осуществляет чтение записи в таблице выводит ее на экран
{
//результирующий набор данных хранится в переменной $sql
$sql = mysql_query("SELECT * FROM $tablename");
$i = 0;
while ($tablerows = mysql_fetch_row($sql))
{
//теперь в цикле для каждой полученной строки сделаем вывод
//$tablerows[1] соответствует полю "первичный текст"
//$tablerows[2] соответствует полю "заголовок услуги"
//$tablerows[3] соответствует полю "текст услуги"
echo("$tablerows[1]<br>$tablerows[2]<br>$tablerows[3]");
}
}
?>
inex.php:
<?php
require_once("funct.php");
gettable(ben);
?>
Все выводится сколько бы записей я не делал все нормально.
После чего взял вот такой JavaScript
java.php:
<style>
.myViewLinks { display: none; }
</style>
<script>
// Обворачиваем функцию toggle в локальное замыкание:
var toggle = function() {
// Ссылка на текущий открытый div:
var currentDiv = null;
// Функция для "раскрытия" элемента:
function open(divElement) {
// Тут можно добавить эффект "плавного" открытия:
divElement.style.display = "block";
currentDiv = divElement;
}
// Функция для "закрытия" элемента:
function close(divElement) {
// Тут можно добавить эффект "плавного" закрытия:
divElement.style.display = "none";
currentDiv = null;
}
// Возвращаем функцию, которая будет вызываться по toggle()
return function(divID) {
// Получаем элемент из DOM
var divElement = document.getElementById(divID);
// Если такой есть:
if (divElement) {
// Если уже открыт этот div, то просто закрываем.
if (divElement === currentDiv) {
close(currentDiv);
// Если открыт другой div, то закрываем и открываем текущий:
} else if(currentDiv != null) {
close(currentDiv);
open(divElement);
// Иначе - просто открываем:
} else open(divElement);
}
}
// Вызываем нашу "обертку", теперь toggle() вызывает функцию, описанную по "return"
}();
</script>
<a href="javascript://" onClick="toggle('div1');return false;">Блок скрытого текста один</a>
<div class="myViewPost" id="div1">
Сдесь содержится текст который показывается и скрывается</div>
<br />
<a href="javascript://" onClick="toggle('div2');return false;">Блок скрытого текста два</a>
<div class="myViewPost" id="div2">
Сдесь содержится текст который показывается и скрывается
</div>
Опять таки все нормально работает открывается и закрывается.
Попробовал соединить funct.php и java.php получилась следующее:
funct_java.php
<style>
.myViewLinks { display: none; }
</style>
<script language="JavaScript">
// Обворачиваем функцию toggle в локальное замыкание:
var toggle = function() {
// Ссылка на текущий(current) открытый div:
var currentDiv = null;
// Функция для "раскрытия" элемента:
function open(divElement) {
// Тут можно добавить эффект "плавного" открытия:
divElement.style.display = "block";
currentDiv = divElement;
}
// Функция для "закрытия" элемента:
function close(divElement) {
// Тут можно добавить эффект "плавного" закрытия:
divElement.style.display = "none";
currentDiv = null;
}
// Возвращаем функцию, которая будет вызываться по toggle()
return function(divID) {
// Получаем элемент из DOM
var divElement = document.getElementById(divID);
// Если такой есть:
if (divElement) {
// Если уже открыт этот div, то просто закрываем.
if (divElement === currentDiv) {
close(currentDiv);
// Если открыт другой div, то закрываем и открываем текущий:
} else if(currentDiv != null) {
close(currentDiv);
open(divElement);
// Иначе - просто открываем:
} else open(divElement);
}
}
// Вызываем нашу "обертку", теперь toggle() вызывает функцию, описанную по "return"
}();
</script>
<?php
require_once("config.php");
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");
function gettable($tablename) //функция которая осуществляет чтение записи в таблице выводит ее на экран
{
//результирующий набор данных хранится в переменной $sql
$sql = mysql_query("SELECT * FROM $tablename");
$i = 0;
while ($tablerows = mysql_fetch_row($sql))
{
$i=$i+1;
echo("
$tablerows[1]
<a href="$i" onClick="toggle('$tablerows[2]');return false;">$tablerows[2]</a>
<div class="myViewLinks" id="$tablerows[2]">
<br>
$tablerows[3]
<br>
</div>
");
}
}
?>
соответственно переделываем
index.php:
<?php
require_once("funct_java.php");
gettable(ben);
?>
Вместо списка который мне нужно получить я получаю пустую страницу. помогите пожалуйста соединить эти два скрипта.
PS. Простите что так много текста просто хотел как можно подробнее описать все.