Вставка случайных слов из файла

Тут мне задали вопрос: "Возможно ли при генерации страниц сайта-сателлита чтобы скрипт находил расставленные в коде шаблона переменные и подставлял каждый раз новое значение? Например, на каждой странице сайта будут размещены три цитаты и хотелось бы, чтобы они были случайным образом выбраны из списка цитат. Интересует именно в момент генерации, чтобы получались уже готовые страницы?"

Да, это возможно. Но это будут не переменная, а функция. В WebSitePad версии 2.1 можно использовать свои функции написанные на JavaScript и кроме этого есть несколько вспомогательных объектов для упрощения часто выполняемых операций. Например, для описанного выше случая отлично подойдет объект strings. Это список текстовых строк, которые можно прочитать из файла и получить значение произвольной строки.

Итак, приступим:
1. Откройте редактор шаблона через меню "Проект/Шаблон".

2. Если в шаблоне проекта нет файла template.js - создайте его. Для этого нажмите кнопку Создать... наберите имя файла template и выберите тип файла JavaScript.

3. В файл template.js добавьте следующий код:

var text = createObject('strings');
text.load('c:\\temp\\text.txt', 'windows-1251');

function word()
{
   return text(Math.floor(Math.random() * text.length));
}

Поясню код. Создаем объект строк, считываем файл c:\temp\text.txt - путь к файлу вы можете заменить на свой, только не забывайте ставить двойной обратный слеш, т.к. это JavaScript. Далее идет код функции word() которая возвращает значение строки выбранной случайным образом.

Теперь в коде проекта в нужное место вставьте вызов функции:

Здесь будет строчка из файла {$word()}, а здесь еще одна {$word()}

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

var text = createObject('strings');
var text_i = -1;
text.load('c:\\temp\\text.txt', 'windows-1251');

function word()
{
var i = Math.floor(Math.random() * text.length);
if ((i == text_i) && (text.length > 1))
   i = (i + 1) % text.length;
text_i = i;
return text(i);
}

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

Другие статьи