[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопрос к тому, кто знает !
sergeimi
Здравствуйте ! Я только начинаю сооружать сайты с использованием php и mysql поэтому пока тяжеловато.
Простой сайт, единственная сложность в том, что он фиксированный по вертикали. Изначально был статичным, а теперь товарищ попросил добавить гостевую книгу и...
Теперь появились вопросы. На сайте есть страница с списком литературных произведений, вроде бы как оглавление и из этого оглавление посетитель должен попадать на страницу, по выбранной им ссылке. Кажется, что трудностей нет, я создал таблицу в БД, с помощью

do {
printf
("<table>
<tr>
<td colspan='2' class='nazvanie'><a href='view_proza.php?id=%s'>%s</a></td>
</tr>
<tr>
<td class='opisanie'>%s</td>
<td class='date'>%s</td>
</tr>
</table>",$myrow ['id'], $myrow ['title'], $myrow['opisanie'], $myrow['date']);
}
while ($myrow = mysql_fetch_array ($result));
"

вывел содержание на страницу

"...nclude ("blocks/db.php");

if (isset ($_GET['id'])) {$id = $_GET['id'];}
$result = mysql_query ("SELECT * FROM proza_soderganie WHERE id='$id'",$db);
$myrow = mysql_fetch_array ($result);..."

и теперь переходя по выбранной ссылке открывается то что нужно, но текст, который открывается по ссылке слишком велик для страницы сайта (она фиксированная по вертикали). Как можно сделать так, что бы работало оглавление, так же с автоматическим добавлением нового материала и чтобы страница вмещала ровно столько текста сколько ей положено (можно ли установить предел), можно ли сделать программным перенос текста на следующую страницу... надеюсь, что мой вопрос и суть проблемы понятна.

Благодарю... с уважением Сергей.



Спустя 10 минут, 30 секунд (5.02.2009 - 22:46) kirik написал(а):
Цитата (sergeimi @ 5.02.2009 - 14:35)
можно ли сделать программным перенос текста на следующую страницу...

Можно каждый раз вытаскивать из текста нужное количество символов таким образом -
SQL
SELECT SUBSTRING(`text`,1,200) FROM proza_soderganie WHERE id='$id'

где 1 - символ с котрого начинать, 200 - количество символов от первого символа. Тоесть вторая страница будет иметь вид SUBSTRING(`text`,201,400).

Но мне кажется что это нужно решать как-то подругому. Потому как "склейка" может попасть (и скорее всего попадет) на какое-нибудь слово. Тоесть на первой странице будет "А потом он начистил свою бля" а на второй "ху и отправился в путь."

Спустя 41 минута, 1 секунда (5.02.2009 - 23:27) sergeimi написал(а):
Цитата (kirik @ 5.02.2009 - 19:46)
Цитата (sergeimi @ 5.02.2009 - 14:35)
можно ли сделать программным перенос текста на следующую страницу...

Можно каждый раз вытаскивать из текста нужное количество символов таким образом -
SQL
SELECT SUBSTRING(`text`,1,200) FROM proza_soderganie WHERE id='$id'

где 1 - символ с котрого начинать, 200 - количество символов от первого символа. Тоесть вторая страница будет иметь вид SUBSTRING(`text`,201,400).

Но мне кажется что это нужно решать как-то подругому. Потому как "склейка" может попасть (и скорее всего попадет) на какое-нибудь слово. Тоесть на первой странице будет "А потом он начистил свою бля" а на второй "ху и отправился в путь."

Пусть попадает !) Распиши пожалуйста подробнее, а то я только учусь, а ты я вижу уже научился)...

Спустя 56 минут, 54 секунды (6.02.2009 - 00:24) REANIMATOR написал(а):
Цитата (kirik @ 5.02.2009 - 19:46)
"А потом он начистил свою бля" а на второй "ху и отправился в путь."

laugh.gif жжёшь

Спустя 3 минуты, 33 секунды (6.02.2009 - 00:27) kirik написал(а):
sergeimi, собственно писать-то больше и нечего, ибо я не знаю полей в твоей таблице и как ты выводишь все =)

Когда выводишь текст произведения делаешь запрос на получение текста -
SQL
SELECT SUBSTRING(`text`,1,200) AS `part`, CHAR_LENGTH(`text`) AS `total` FROM proza_soderganie WHERE id='$id'

В результате после mysql_fetch_array получаешь 2 элемента в массиве - $myrow['part'] в котором содержится кусок текста с 1-й по 200-й символы и $myrow['total'] с количеством символов во всем тексте (лучше это значение прописывать в отдельное поле, чтобы при каждом запросе не пересчитывать заново).

Потом основываясь на этих данных (у нас есть количество символов в тексте и кол-во символов для вывода - 200) делим $myrow['total']/200 получаем количество страниц.
И потом при переходе на след. страницу подставляем вместо первого значения функции SUBSTRING свое смещение (для первой страницы это будет 1, для второй 201, для третьей 401 итд). Выглядеть все будет как-то так

PHP
$onpage 200// количество символов на странице
$offset = ($_GET['page'] > && is_numeric($_GET['page'])) ? ($_GET['page'] - 1) * $onpage 1// считаем какую страницу показать
$result mysql_query ("SELECT    SUBSTRING(`text`,{$offset},{$onpage}) AS `part`,
                            CHAR_LENGTH(`text`) AS `total`
                        FROM `proza_soderganie`
                            WHERE `id` = '{$id}'
                                LIMIT 1"
$db);
$myrow mysql_fetch_assoc($result);
echo 
'Кусок текста - '.$myrow['part'].'<br /><br />'// выводим кусок текста

$pages ceil($myrow['total'] / $onpage); // считаем количество страниц и выводим их
for($i 1$i <= $pages$i++)
{
    echo 
'<a href="?page='.$i.'">'.$i.'</a> ';
}


Это не претендует на лучший вариант. Просто написал то что первое пришло в голову rolleyes.gif

Спустя 15 часов, 28 минут, 14 секунд (6.02.2009 - 15:55) sergeimi написал(а):
Цитата (kirik @ 5.02.2009 - 21:27)
[

($_GET['page'] > 1 && is_numeric($_GET['page'])) ? ($_GET['page'] - 1) * $onpage + 1 : 1;

Терерь всче работает, кроме перехода по страницам. Можешь объяснить то что в этой строке? ...)



Спустя 2 минут, 46 секунд sergeimi написал(а):
Чего-то я не понимаю... blink.gif

Спустя 2 часа, 3 минуты, 37 секунд (6.02.2009 - 17:59) FatCat написал(а):
Цитата (kirik @ 5.02.2009 - 22:46)
"склейка" может попасть (и скорее всего попадет) на какое-нибудь слово

Или на середину тега; или раскидает открывающие/закрывающие, да так, что поломает всю страницу. Например при табличной верстке в тексте с таблицами открывающие теги попадут на первую страницу, а закрывающие на вторую.


Цитата (REANIMATOR @ 6.02.2009 - 00:24)
жжёшь

Лучший отжиг был в журнале "Компьютерра" лет 5 назад в статье про игровые приставки. Угадай как разорвало переносом на страницы слова "шестнадцатибитные процессоры"!

Спустя 12 минут, 48 секунд (6.02.2009 - 18:12) sergeimi написал(а):
Цитата (FatCat @ 6.02.2009 - 14:59)
Цитата (kirik @ 5.02.2009 - 22:46)
"склейка" может попасть (и скорее всего попадет) на какое-нибудь слово

Или на середину тега; или раскидает открывающие/закрывающие, да так, что поломает всю страницу. Например при табличной верстке в тексте с таблицами открывающие теги попадут на первую страницу, а закрывающие на вторую.


Цитата (REANIMATOR @ 6.02.2009 - 00:24)
жжёшь

Лучший отжиг был в журнале "Компьютерра" лет 5 назад в статье про игровые приставки. Угадай как разорвало переносом на страницы слова "шестнадцатибитные процессоры"!

Есть другой способ? )

Спустя 42 минуты, 11 секунд (6.02.2009 - 18:54) twin написал(а):
Самый простой способ - использовать базу по её прямому назначению, а именно хранить в ней текст, а не разметку. А вообще для этих целей используется оператор SUBSTRING_INDEX

Спустя 17 минут, 15 секунд (6.02.2009 - 19:11) sergeimi написал(а):
Цитата (twin @ 6.02.2009 - 15:54)
Самый простой способ - использовать базу по её прямому назначению, а именно хранить в ней текст, а не разметку. А вообще для этих целей используется оператор SUBSTRING_INDEX

А можно как-нибудь использовать базу по прямому назначению в моем случае? Может как-то поместить текст в отдельный файл и к нему делать обращения. Подскажите, ведь вам виднее...

Спустя 2 часа, 7 минут, 5 секунд (6.02.2009 - 21:18) twin написал(а):
Цитата
Самый простой способ - использовать базу по её прямому назначению,

Это я не Вам smile.gif
У Вас база как раз используется как надо, для хранения текста. Помещать текст в файл имеет смысл тогда, когда это статичный, то есть неизменяемый (ну или редко изменяемый) текст. Тогда есть смысл оформить это просто HTML страницами и не мудрить с базой. А если предполагается изменение текста, его обработка или выборка по условиям (допустим поиск), то тогда конечно база. Почитайте в мануале про оператор SUBSTRING_INDEX, он должен решить Вашу проблему.

Спустя 1 час, 29 минут, 46 секунд (6.02.2009 - 22:48) sergeiss написал(а):
Предлагаю попробовать изменить постановку задачи.
Сейчас она звучит "как мне обрезать текст, чтобы она вмещался на страницу".
Но можно чуть-чуть переиначить... "Что мне сделать со страницей, чтобы поле показа текста не увеличивалось (чтобы не изменялась "красивость" сайта), но чтобы весь текст туда влезал?"
При такой постановке вопроса ответ будет такой: сделай ячейку таблицы "с прокруткой" ее содержимого. И помещай туда текст. Тогда и дизайн мало изменится, и резать текст не придется.

Как эта идея?

Спустя 2 часа, 16 минут, 46 секунд (7.02.2009 - 01:05) FatCat написал(а):
Цитата (sergeiss @ 6.02.2009 - 22:48)
Как эта идея?

Я не люблю спойлеры с прокруткой и ифреймы: они неадекватно реагируют на колесо мыши. Когда указатель мыши попадает случайно на спойлер, скроллить начинает уже спойлер, а не страница.

Спустя 22 минуты, 17 секунд (7.02.2009 - 01:27) twin написал(а):
Повторюсь, однако. Самый простой выход - порезать текст при записи в базу, а выводить в постраничном режиме.

Спустя 48 минут, 37 секунд (7.02.2009 - 02:16) FatCat написал(а):
twin
user posted image

Спустя 8 часов, 43 минуты, 30 секунд (7.02.2009 - 10:59) sergeimi написал(а):
Цитата (sergeiss @ 6.02.2009 - 19:48)
Предлагаю попробовать изменить постановку задачи.
Сейчас она звучит "как мне обрезать текст, чтобы она вмещался на страницу".
Но можно чуть-чуть переиначить... "Что мне сделать со страницей, чтобы поле показа текста не увеличивалось (чтобы не изменялась "красивость" сайта), но чтобы весь текст туда влезал?"
При такой постановке вопроса ответ будет такой: сделай ячейку таблицы "с прокруткой" ее содержимого. И помещай туда текст. Тогда и дизайн мало изменится, и резать текст не придется.

Как эта идея?

при помощи обычных css возможностей скролинг ьбудет портить дизайн, но я нашел вот такой вот скролинг http://plugins.jquery.com/project/jScrollPane

Только не знаю, как ее установить ... подскажите? user posted image

Спустя 1 час, 40 минут, 28 секунд (7.02.2009 - 12:40) Sylex написал(а):
ну скачай сначала, и вот же пример тебе есть:
http://www.kelvinluck.com/assets/jquery/jS...e/examples.html
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.