Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 475

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты! Я хочу установить на своем сайте цитаты, которые изменяется автоматически при переходе на другую страницу (как на этом сайте). Теперь не знаю как это сделать. Поискал в интернет там много информеров, но все они на русском языке. А я хочу написать на казахском. Подскажите мне пожалуйста, как это делается или дайте какую-нибудь подсказку или ссылку. Заранее большое спасибо!!!

Ермаханов Айбек Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Ермаханов Айбек (статус: Посетитель)
Вопрос отправлен: 30 июля 2010, 15:49
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Егор

Здравствуйте, Ермаханов Айбек!
Итак, как сделать на ява-скрипте.
Можно сделать по топорному - создать, например, массив, в который и загнать все цитаты. А затем показывать случайную цитату из этого массива.
Пример. На странице в том месте, где нам нужно вывести цитату (например, в теге div), пишем:

...
<div style="background-color:#dfdfdf; font-style:italic; text-align:right; margin-left:300px;">
<!-- это задали новый блок с фоновым светло-серым цветом, курсивным текстом,
     выравниванием по правому краю и слева будет отступ в 300 пикселей-->
  <script>
    // создадим массив цитат:
    quote = new Array (  'Вероятность того, что бутерброд упадет маслом вниз, прямо пропорциональна стоимости ковра.',
                        'Семь бед - один Reset.',
                        'Win98: Подождите, идёт подготовка к зависанию компьютера.',
                        'Компонент схемы, у которого самый короткий срок службы, помещается в наименее доступном месте',
                        '"Дефолт тебя на язык!"')
    count = quote.length;                  // это нашли длину нашего массива
    i = Math.floor(Math.random()*count);   // а тут выбрали номер цитаты
    document.write(quote[i]);              // а вот это - вывод цитаты на страницу
  </script>
</div>
...
Уж прости, Андрей. цитаты я взял отсюда. :)

Но тут сразу видны минусы - хоть отображается лишь одна цитата, но высылаются клиенту ВСЕ цитаты сразу. Это не есть гуд.

Можно поступить другим путём - а-ля "AJAX" :) Даже если сервер не поддерживает ни PHP, ни Perl, ни ещё что-либо (как, например, тот же народ.ру). Поступаем следующим образом:
1. Создаём файлы с цитатами. В каждом файле - одна цитата. Называться они, пусть будут так:
txt0.js
txt1.js
txt2.js
txt3.js и т.д.
нумерация - с НУЛЯ, и пропусков не должно быть

В каждом из этих файлов прописываем цитату в следующем формате:

txt0.js:
quote='Вероятность того, что бутерброд упадет маслом вниз, прямо пропорциональна стоимости ковра.'

txt1.js:
quote='Семь бед - один Reset.'

txt2.js:
quote='Win98: Подождите, идёт подготовка к зависанию компьютера.'
...

Т.е. меняется лишь текст в одинарных кавычках. Название переменной (quote) остаётся без изменений.
Итак, создали мы ява-скриптовские файлы. Теперь вопрос - как же подключить один из этих файлов? Нам надо подключать не все, а лишь один из этих файлов, случайным образом. Тут мне помог яндекс :) Вторая (или третья?) ссылка в правильном запросе дала ответ - создаём динамически новый тег script, указываем ему нужный путь к файлу и подключаем этот тег к странице:
...
<script>
  var count = 10; // Здесь мы указываем, сколько всего имеется цитат, т.е. файлов.
                  // Внимание - т.к. нумеруем файлы с нуля, то, скажем, если последний
                  // файл назывался txt14.js, то тогда count=15.
  var i;
  i = Math.floor(Math.random()*count);            // получаем случайный номер для файла
  var script = document.createElement('script')   // создадим новый элемент script
  script.setAttribute('type', 'text/javascript')  // укажем для него атрибуты
  script.setAttribute('src', "txt"+ i + ".js");   // укажем адрес файла с цитатой
  document.getElementsByTagName('head').item(0).appendChild(script); // а теперь присоединим этот тег к тегу head
</script>
 
<div style="background-color:#dfdfdf; font-style:italic; text-align:right; margin-left:300px;">
  <script>
    document.write(quote);
  </script>
</div>
...

Примеры проверял - всё должно работать.
Хотя, конечно, на PHP было бы проще. Так что нужно переходить на другие хостинги - благо, такие есть. И притом даже бесплатные.

Ответ отправил: Егор (статус: 10-ый класс)
Время отправки: 30 июля 2010, 19:49
Оценка за ответ: 5

Комментарий к оценке: Спасибо ВАМ большое!!!

Мини-форум вопроса

Всего сообщений: 13; последнее сообщение — 31 июля 2010, 10:26; участников в обсуждении: 4.
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 30 июля 2010, 16:02 [#1]:

Цитаты хранятся в текстовом файле по одной на строке. С помощью PHP весь файла читается, строки переносятся в массив, после чего делается выбор случайной строки и она отображается.
Ермаханов Айбек

Ермаханов Айбек (статус: Посетитель), 30 июля 2010, 16:45 [#2]:

Ерёмин А.А.: Здравствуйте. А с помощью ява скриптов можно сделать?
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 30 июля 2010, 18:12 [#3]:

А вы знаете, что JS — это клиентский язык, а PHP — серверный?
Можно, но будет очень криво и нерационально.
Ермаханов Айбек

Ермаханов Айбек (статус: Посетитель), 30 июля 2010, 18:17 [#4]:

Ерёмин А.А.: в юкозе PHP не разрешается. А Вы не могли бы мне дать ссылку готовых примеров если есть конечно?
Егор

Егор (статус: 10-ый класс), 30 июля 2010, 18:33 [#5]:

не, ну, в принципе, можно и через ява-скрипт сделать. и при этом не грузить все цитаты сразу :)
правда, будет всё равно не красиво. но можно
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Вадим К

Вадим К (статус: Академик), 30 июля 2010, 18:34 [#6]:

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

Егор (статус: 10-ый класс), 30 июля 2010, 18:50 [#7]:

Вадим К: ясно же было написано - никакого php. или с базой можно из ява-скрипта работать? тем более, что если пхп запрещён, то, скорее всего, базы тоже недоступны.
через яву-скрипт можно, конечно, но это будет совсем, конечно, через ... одно место.
но можно
:)
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Ермаханов Айбек

Ермаханов Айбек (статус: Посетитель), 30 июля 2010, 19:29 [#8]:

Кто-нибудь сможет мне составить пример на ява скрипте, если не трудно?
Егор

Егор (статус: 10-ый класс), 30 июля 2010, 19:40 [#9]:

пишу ответ :)
дождись - скоро будет
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

Егор (статус: 10-ый класс), 30 июля 2010, 19:50 [#10]:

Андрей, на ява-скрипте зелёные скобочки смотрятся просто ужасно. Хорошо бы их в чёрные переделать?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 31 июля 2010, 09:30 [#11]:

Егор: отличный ответ! Как раз про первый способ я и говорил. Но если цитат много, то страница сильно увеличится в весе, а толку от этого немного. А вот идея с отдельными файлами — очень даже интересно! Больше хлопот при подготовке, но зато результат нужный. Можно и простенькую программу написать, которая из текстовика сделает кучку таких файлов.

Цитата (Егор):

Андрей, на ява-скрипте зелёные скобочки смотрятся просто ужасно. Хорошо бы их в чёрные переделать?

Ага, стандартная схема подобрана не лучшим образом. Изменил.
Егор

Егор (статус: 10-ый класс), 31 июля 2010, 09:59 [#12]:

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

но всё это извраты, конечно.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 31 июля 2010, 10:26 [#13]:

Егор: хех :-) Ну всё же с серверными скриптами всё проще. Бесплатные хостинги вроде можно найти.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 16 ноября 2024, 15:34
Выполнено за 0.03 сек.