Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение содержимого сразу двух фреймов, Как лучше сделать?.. 
V
    Опции темы
Vitalik
Дата 3.8.2007, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

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



Собственно проблема следующая. Как мне кажется у нее должно быть какое-то банальное правильное решение, оно обязательно должно существовать..

Был обычный безфреймовый сайт. Слева табличка со ссылками. Нужно было его переделать на фреймы. Уже почти все готово, но не совсем..
Значится, у нас есть два фрейма (на самом деле три, трейтий вверху, но это не принципиально). Ситуация вполне обычная и стандартная: есть один фрейм - основной (в нем отображается текущее содержимое) и второй фрейм - дополнительный (в нем отображается менюшка, которая меняется в зависимости от содержимого основного фрейма).

Я долго думал, где бы мне задать вопрос об этом.. Форум "Вёрстка веб-сайтов" отпал, так как здесь скорее всего проблему невозможно решить только с помощью голого HTML. Думал потом создать ее в "JavaScript: Общие вопросы", но дело в том, что я и так знаю, как с помощью JavaScript изменить содержимое фрейма (кажется так: имя_фрейма.location.href = 'новый url'). Тут проблема несколько "ширше"..

Нужно не просто сделать "рядовую" ссылочку, меняющую содержимое двух фреймов. Хотелось бы, чтобы href у всех ссылок остался прежний, и никаких onclick по возможности не добавилось, просто у ссылок в дополнительном фрейме появляется target на основной фрейм, а все остальные ссылки остались бы вообще без изменений. В принципе может и ничего страшного не было бы, если бы добавить к каждой ссылочке какую-то ерунду, но ведь тогда и перелопачивать все файлы проекта придется, и страничка станет больше и неуклюжей.. Вобщем этого бы очень не хотелось..

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

if(!isset($_GET['navigator'])) {
    $link = "index.php?".$_SERVER['QUERY_STRING']."&navigator";
    echo "<script language='JavaScript'> parent.document.all.nav.src='$link'; </script>";
}

В файле index.php для каждого параметра action просто напросто идет такой код:
Код

case 'main':
    if(isset($_GET['navigator'])) {
        //: Выводим менюшку для дополнительного фрейма
    }
    else {
        //: Выводим основное содержимое в основной фрейм
    }
    break;

И все хорошо, все замечательно.. Если бы не несколько "но"..
Во-первых, этот навигатор (то есть менюшка в дополнительном фрейме) обновляется только тогда, когда полностью обновится страница в основном фрейме. А это ведь бывает до нескольких секунд приходится ждать и как-то не эстетично получается, когда вот уже видна загрузка новой страницы, а дополнительный фрейм содержит старую менюшку..
Во-вторых, очень неприятно, что история посещения содержит в два раза больше элементов.. То есть чтобы попасть на прошлую страницу нужно два раза щелкнуть по кнопке "Назад" (один раз для обновления навигатора, один раз для основного содержимого). Это очень-очень неудобно..

Если для решения этой проблемы нужен только JS, то можете перемещать эту тему туда.. user posted image
Просто я подумал, что может вдруг придется и серверную часть затронуть.. Да и куски PHP-кода здесь присутствуют..
PM MAIL WWW ICQ YIM   Вверх
Vitalik
Дата 4.8.2007, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

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



Гм.. Неужели ни у кого никогда не возникало подобных проблем?.. user posted image

Может быть все-таки мне стоит создать пару конкрентых вопросов в форуме по JS, может можно будет обойтись JS-шными "заплатками" к существующему методу?..
PM MAIL WWW ICQ YIM   Вверх
Oflashp
Дата 4.8.2007, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ajax в руки, фреймы в жопу и поехали.
Или юзай плавающие фреймы
Или disable:none|block

Это сообщение отредактировал(а) Oflashp - 4.8.2007, 20:55
PM MAIL ICQ   Вверх
Vitalik
Дата 4.8.2007, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

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



Oflashp, спасибо за ответ smile

Дело в том, что нужно, чтобы основное содержимое скролилось, в то время как менюшка оставалась на месте. Это обязательное условие.
Поэтому, наверное, единственным альтернативным вариантом будет плавающий фрейм. Но есть ли какой-то принципиальный выигрыш от этого? Чем с плавающим фреймом проще работать?.. Может я чего-то не понимаю.. user posted image

Добавлено @ 21:08
Гм.. Сейчас вдруг пришла мысль.. Интересно, можно ли поместить содержимое в DIV и там как-то заставить его скролиться? smile

Добавлено через 6 минут и 34 секунды
Вот только жалко будет все обратно переделывать.. Так намучился с этими фреймами.. smile

Это сообщение отредактировал(а) Vitalik - 4.8.2007, 21:10
PM MAIL WWW ICQ YIM   Вверх
Oflashp
Дата 5.8.2007, 01:05 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Vitalik @ 4.8.2007,  21:07)
Oflashp, спасибо за ответ smile

Дело в том, что нужно, чтобы основное содержимое скролилось, в то время как менюшка оставалась на месте. Это обязательное условие.
Поэтому, наверное, единственным альтернативным вариантом будет плавающий фрейм. Но есть ли какой-то принципиальный выигрыш от этого? Чем с плавающим фреймом проще работать?.. Может я чего-то не понимаю.. user posted image

Добавлено @ 21:08
Гм.. Сейчас вдруг пришла мысль.. Интересно, можно ли поместить содержимое в DIV и там как-то заставить его скролиться? smile

Добавлено @ 21:14
Вот только жалко будет все обратно переделывать.. Так намучился с этими фреймами.. smile

Для броузеров кроме IE доступно свойство position:fixed которое держит в заданном месте любой обьект и прокручивает ос страницей.

Добавлено через 2 минуты и 10 секунд
По поводу загрузки, в дополнительном окне пихаешь всё в див, с свойством по умолчанию visibility: none
И в конце окна основного пусть скрипт пишет яву, которая будет менять это свойство...или перегружать фрейм.
PM MAIL ICQ   Вверх
Vitalik
Дата 5.8.2007, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

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



Цитата(Oflashp @  5.8.2007,  00:05 Найти цитируемый пост)
Для броузеров кроме IE доступно свойство position:fixed которое держит в заданном месте любой обьект и прокручивает ос страницей.

То есть такое можно сделать, например, с менюшкой, я правильно понял?
Гм.. То, что IE не поддерживает это очень плохо.. Хотелось бы все-таки, чтобы проект работал и под этим основным (в плане доступности) браузере.. :(

Цитата(Oflashp @  5.8.2007,  00:05 Найти цитируемый пост)
По поводу загрузки, в дополнительном окне пихаешь всё в див, с свойством по умолчанию visibility: none
И в конце окна основного пусть скрипт пишет яву, которая будет менять это свойство...или перегружать фрейм.

Не очень понял.. Это относится к текущему решению с фреймами?
То есть просто при изменении основного содержимого сделать скрипт, который бы обновлял содержимое дополнительного фрейма?
Но ведь сейчас именно так и сделано и это порождает две проблемы, описанные выше (проблема с историей и проблема с задержкой обновления).. :(


P.S.
Я еще не интересовался, но может вы подскажете. Можно ли сделать скролируемый DIV и как это лучше сделать. DIV с полосой прокрутки, при чем DIV на всю оставшуюся часть страницы.. Возможно?
PM MAIL WWW ICQ YIM   Вверх
Vitalik
Дата 5.8.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

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



Выяснил, что можно сделать скролируемый DIV так:
Код

<div style='overflow: scroll; width: 800; height: 100%'>
... очень много текста ...
</div>

Таким образом поместив его справа от менюшки можно добиться в точности такого же эффекта, как и с помощью фреймов.. smile
Эх, как жаль, что я сразу до этого не догадался.. Придется теперь "откатываться" назад.. smile

<оффтопик>
P.S. Есть ли здесь на форуме самый обычный грустный смайл?.. Не сердитый анимационный, который сейчас под "sad", а тот что был давным давно под ":(". Или хотя бы аналогичный по смыслу. А то очень не хватает иногда..
</оффтопик>

PM MAIL WWW ICQ YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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