Модераторы: Illuminaty
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Показать только часть содержимого страницы, по клику "подробнее" раскрыть все 
:(
    Опции темы
black_dragon
Дата 21.1.2013, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 13.4.2007
Где: Рязань

Репутация: нет
Всего: нет



Добрый день.

Подскажите как можно реализовать следующее.

Есть страница с большим количеством текста. Для удобства - показываем при выводе только часть, к примеру пару абзацев и ставим ссылку "подробнее" при клике по которой отображается полное содержимое страницы, но без перехода на другую страницу, а как бы показываем скрытую часть текста, которая выводится ниже, после ссылки "Подробнее".

Предполагал вариант, когда для div с контентом ставим высоту к примеру 250 px и запрещаем прокрутку, а при клике по ссылке "подробнее" делаем высоту по содержимому. 
При этом есть 2 проблемы. Такая конструкция нужна не на всех страницах, а только там, где пользователь укажет эту ссылку "подробнее". А вторая - изначальная высота страницы со скрытым содержимым устанавливается пользователем - может это будет 3 предложения, может 3 абзаца, т.е. высота разная.

Надеюсь более менее понятно объяснил задумку.

Можно ли такое реализовать, или что-то на подобии.

Спасибо



PM MAIL ICQ   Вверх
Arantir
Дата 21.1.2013, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 5
Всего: 55



А что вам мешает делать это только там, где пользователь укажет ссылку?
Опять же, что мешает ставить установленную пользователем высоту при выводе страницы?




--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Gold Dragon
Дата 21.1.2013, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 9
Всего: 71



Код

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
</head>
<body>
<div id="top">Вводная часть</div>
<div id="desc">Часть после нажания на "Подробнее"</div>
<button id="more">Подробнее</button>
<script>
    $(function(){
        $("#desc").hide();

        $("#more").click(function(){
            $("#desc").show(600);
            $("#more").remove();
        });
    });

</script>
</body>
</html>



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
black_dragon
Дата 22.1.2013, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 13.4.2007
Где: Рязань

Репутация: нет
Всего: нет



Gold Dragon, спасибо за пример, то что было нужно.
Только к содержимому страницы в панели управления добавлю еще поле типа "вводная часть". Если заполнено только оно - кнопку не рисуем, если поле с полным контентом заполнено - после "вводной части" рисуем кнопку.

Спасибо за помощь
PM MAIL ICQ   Вверх
Gold Dragon
Дата 22.1.2013, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 9
Всего: 71



Код

    $(function(){
        if($.trim($("#desc").html())== ''){
            $("#more").remove();
            $("#desc").remove();
        }else{
            $("#desc").hide();
            $("#more").click(function(){
                $("#desc").show(600);
                $("#more").remove();
            });
        }
    });


Добавлено через 2 минуты и 7 секунд
Если поле пустое или содержит только пробельные символы, то этот контейнер и кнопка удаляться.. если не пустое, то будет как было выше


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
nule
Дата 25.1.2013, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 3.11.2011

Репутация: нет
Всего: нет



А как реализуют автоматическое выделение вводной части? Когда буквально в середине предложения ставится ... и ссылка "читать далее".
PM MAIL   Вверх
Arantir
Дата 25.1.2013, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 5
Всего: 55



Совсем воображение у людей отвалилось =)
Перед выводом текста просто проверяется его длина, если она больше указанной - обрезается все лишнее и ставятся три точки + ссылка.
Если через JS, то можно просто видимую часть завернуть в один span, а скрытую в другой с display: none, который при потребности можно легко сделать видимым. Три точки и ссылку тоже можно поместить в span, чтобы их можно скрыть при разворачивании текста. 


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Gold Dragon
Дата 25.1.2013, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 9
Всего: 71



Arantir, рискуешь попасть на большой глюк... а если там тэги??? и очистить нельзя так как очень хочется сохранить форматирование  smile

Добавлено @ 19:26
вот когда-то разрабатывал (не без помощи форума конечно) обрезание строки с сохранением форматирования (хотя явно не тот раздел)....
Код

    /**
     * Обрезка текста с сохранением форматирования
     * @param        $html   - текст
     * @param        $length - длина
     * @param string $hellip - текст который добавляется в конце обрезка
     *
     * @return string
     */
    function htmlSubstr($html, $length, $hellip = '')
    {
        $out = '';
        $arr = preg_split('/(<.+?>|&#?\\w+;)/s', $html, -1, PREG_SPLIT_DELIM_CAPTURE);
        $tagStack = array();

        for ($i = 0, $l = 0; $i < count($arr); $i++) {
            if ($i & 1) {
                if (substr($arr[$i], 0, 2) == '</') {
                    array_pop($tagStack);
                } elseif ($arr[$i][0] == '&') {
                    $l++;
                } elseif (substr($arr[$i], -2) != '/>') {
                    array_push($tagStack, $arr[$i]);
                }

                $out .= $arr[$i];
            } else {
                if (($l += strlen($arr[$i])) >= $length) {
                    $out .= substr($arr[$i], 0, $length - $l + strlen($arr[$i]));
                    break;
                } else {
                    $out .= $arr[$i];
                }
            }
        }
        $out .= $hellip;
        while (($tag = array_pop($tagStack)) !== NULL) {
            $out .= '</' . strtok(substr($tag, 1), " \t>") . '>';
        }

        return $out;
    }



Это сообщение отредактировал(а) Gold Dragon - 25.1.2013, 19:27


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Arantir
Дата 25.1.2013, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 5
Всего: 55



Цитата(Gold Dragon @  25.1.2013,  18:22 Найти цитируемый пост)
Arantir, рискуешь попасть на большой глюк... а если там тэги???

А если нет? =)
Далеко не везде возможно присутствие тегов. Например, это какое-то простое описание, где теги не разрешены, но таких описаний на странице много и их надо обрезать до 100 символов, чтобы больше влезло.
Вариантов можно придумать много, но цель оправдывает средства.

Лично я не стал бы тратить лишние ресурсы на одну только мнимую возможность наличия тега в месте обрезки. Да и вообще на такие косметические операции тоже бы не стал, если честно =)
Лучше поставить фиксированную высоту, а в конце строки картинку (абсолютно спозиционированную) с плавным уменьшением прозрачности, ну или на всю нижнюю строчку такую картинку (но уже с вертикальным градиентом). Распространенная практика. И выглядит красиво и не надо кучи лишних вычислений ни на php, ни на js.

Там, где я припоминаю наличие обрезки с вставкой трех точек и ссылки, обычно никаких тегов в тексте не предусматривалось, это были простые описания фильмов, товаров и подобное. Соответственно, там навряд ли использовалось что-то более мудреное, чем простая проверка длины и обрезка.

Никому свое мнение не навязываю, сейчас все всё больше ресурсов начинают тратить как раз визуальную часть интерфейса, просто я привык делать все как можно более эффективным с учетом требуемой универсальности, а не наоборот.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Вёрстка веб-сайтов | Следующая тема »


 




[ Время генерации скрипта: 0.0504 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.