Понадобилось сгенерировать большое количество html страниц по шаблону на основе базы данных формата sql, используя такое понятие как мультикей (multikey). Использование мультикея заключается в том что при создании шаблона мы вставляем несколько макросов с подключами, к примеру [KEYPART-1] [KEYPART-2] [KEYPART-3] и так далее, а во время генерации страниц эти макросы заменяются данными одной строки из базы данных соответственно из столбцов соответствующих номеру подключу. К примеру макрос [KEYPART-2] выведет данные из столбца 2 текущей обрабатываемой строки базы данных.
Попробовал найти готовые решения, ничего годного не обнаружилось. Есть такая функция в небезызвестном доргене pandorabox, но при тестировании нуленной версии 1.1.2.3 обнаружилось что пандора никак не хочет вставлять данные в которых присутствуют html теги, а также она не способна была переварить файл базы данных более 50 мегабайт. Пришлось искать другие решения.
Обратился к одному знакомому, и просто хорошему человеку, накидал небольшое ТЗ и через полчаса получил работающий php скрипт. Сразу проверил работу такого мини-доргена с файлом базы данных размером в 1 гигабайт и 300k строк. В итоге за две минуты получил 300k необходимых html файлов.
Выкладываю здесь сей скрипт, может кому и пригодится.
Кладем его в папку, в эту же папку закидываем файл базы данных sql под именем keys.txt, где в качестве разделителя столбцов используется символ «;» (точка с запятой)
А также ваш html шаблон с макросами формата [KEYPART-N], где N -номер столбца начиная с единицы. Файл шаблона должен называться template.html
Еще нужно будет создать папку files куда будут складываться сгенерированные страницы.
Для выбора названия файлов, которые будут генерироваться, можно в строке 21 менять параметр $key[1] подставляя вместо единицы необходимый номер столбца, данные которого вы хотите использовать при генерации имени сохраняемого файла.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php $keys = array(); if (($handle = fopen("keys.txt", "r")) !== FALSE) { while (($data = fgetcsv($handle, 0, ";")) !== FALSE) { $keys[] = $data; } fclose($handle); } //$keys = array_slice($keys, 0, 100); // Comment the string to generate all files $template = file_get_contents('template.html'); foreach($keys as $key) { $content = $template; for($i=0; $i<=26; $i++) { $content = str_replace('[KEYPART-' . ($i+1) . ']', $key[$i], $content); } $content = str_replace('\"', '"', $content); $filename = str_replace(' ', '-', trim(preg_replace('/[^ a-zA-Z0-9]/', '', $key[1]))) . '.html'; $handle = fopen('files/' . $filename, 'w'); fwrite($handle, $content); fclose($handle); } ?> |
9,298 просмотров всего, 1 просмотров сегодня