Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 26/10/11 в 13:42 |
В ПХП не силен, иногда что то простенькое могу сделать. Тут нужна вот такая штуковина.
есть текстовый файлик в котором построчно написаны данные:
DATA1|DATA2|DATA3|DATA4|DATA5|DATA6|DATA7
DATA1|DATA2|DATA3|DATA4|DATA5|DATA6|DATA7
DATA1|DATA2|DATA3|DATA4|DATA5|DATA6|DATA7
DATA1|DATA2|DATA3|DATA4|DATA5|DATA6|DATA7
кажда строка со своими данными
Мне нужно чтоб скрипт геренировал страницы по принципу
создает .shtml страницу и в определенные места вставляет эти данные.
Как я понимаю, мне нужно создать шаблон, отметить места в шаблоне чтоб скрипт знал куда вставлять ту или иную переменную. Но как это все собрать воедино не имею понятия. Подскажите в какую сторону рыть. Порой приходиться пару десятков страниц делать, а вручную это очень долго, да и обязательно где то да пропустишь что нибудь.
Вобщем буду благодарен любым подсказкам по теме.
|
|
|
|
full-plastic programmist
С нами с 05.09.03
Сообщения: 8361
Рейтинг: 4779
|
Добавлено: 26/10/11 в 13:48 |
сейчас как раз что то подобное делаю.
там все элементарно на самом деле, если ты не умолчал о каких либо тонкостях
скинь пример в личку (или тут опиши) какая например страница и куда что вставляется.
я правильно понял что по каждой строчке своя страница генерится?
|
|
вот соскучился по мастеру...
|
6
|
|
|
С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010
|
Добавлено: 26/10/11 в 17:05 |
да легко, делается шаблон со вставкой в нужных местах {DATA1}...{DATA7}
затем этот шаблон читается через
$content = file_get_contents('shablon.html');
и делается простая замена через
$content = str_replace('{DATA1}', 'DATA1', $content);
...
$content = str_replace('{DATA7}', 'DATA7', $content);
соответственно DATA1...DATA7 распарсивается со строки через explode
|
|
|
|
full-plastic programmist
С нами с 05.09.03
Сообщения: 8361
Рейтинг: 4779
|
Добавлено: 26/10/11 в 17:16 |
|
|
вот соскучился по мастеру...
|
6
|
|
|
С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970
|
Добавлено: 26/10/11 в 17:51 |
Нафига такие извращения? str_replace массивы принимает. А у регулярных так вообще - безлимит.
Код: |
$raws = explode(...);
$html = preg_replace('/\{DATA([0-9]+)\}/ei', "\$raws['$1']", $content);
|
ibiz писал: | Осталось 1590 часов |
До Нового года?
Тоже очень жду
|
|
|
|
С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010
|
Добавлено: 26/10/11 в 18:18 |
gimcnuk писал: | Нафига такие извращения? str_replace массивы принимает. А у регулярных так вообще - безлимит.
|
учитывал
Цитата: | В ПХП не силен, иногда что то простенькое могу сделать. |
соответственно регулярки понимать сложнее
у меня тут студенты обучаются и не с первого раза понимают функцию array_chunk, хотя казалось бы чего тут непонятного?
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 26/10/11 в 19:59 |
всем спасибо
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 30/10/11 в 07:22 |
Ну вот что получилось:
Код: [развернуть] |
<?php
$content = file_get_contents('face.tpl');
$massiv = "imyafaila1|vstavka1|vstavka2|vstavka3|vstavka3";
$data = explode("|", $massiv);
$html = preg_replace('/\{DATA([0-9]+)\}/ei', "\$data['$1']", $content);
$ourFileName = "$data[0].txt";
$ourFileHandle = fopen($ourFileName, 'w') or die("can't open file");
fwrite($ourFileHandle,$html);
fclose($ourFileHandle);
?>
|
Создается файл в него подставляются значаения из $massiv.
Стал пробовать усложнить задачу. И заставить всё это дело работать с файлом, т.е. чтоб данные из фала, в котором записано
imyafaila1|vstavka1|vstavka2|vstavka3|vstavka3
imyafaila2|vstavka1|vstavka2|vstavka3|vstavka3
imyafaila3|vstavka1|vstavka2|vstavka3|vstavka3
построчно читались и заносились в массив, ну и скрипт работал по принципу:
читает первую строку из файла, заносит ее в массив, создает файл imyafaila1, в него копирует шаблон с уже заменами, закрывает файл.
читает вторую строку создает imyafaila2, в него копирует шаблон с уже заменами, закрывает файл. и т.д.
вчера попробовал заменить уже готовую строку массива $massiv на обращение к файлу и чтение его в массив, затем с помощью цикла foreach, пройтись по массиву и сделать то что описал выше, но что то видемо не так делаю. Подтолкните на правильный путь пожалуйста, не прошу написать сам код, просто подскажите что не так делаю. Есть еще вопросики, но они сейчас не так важны.
Всем за помощь как обычно +6
За ранее благодарен. Чет увлек меня ПХП, может так потихоньку научусь делать что то полезное. А то в мелочах еще более менее разбираюсь, а вот что по серьезнее и появляются сложности.
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 30/10/11 в 08:07 |
1.txt:
imyafaila1|vstavka1|vstavka2|vstavka3|vstavka3
imyafaila2|vstavka1|vstavka2|vstavka3|vstavka3
imyafaila3|vstavka1|vstavka2|vstavka3|vstavka3
Код: [развернуть] |
<?php
$content = file_get_contents('face.tpl');
$massiv = file('1.txt', FILE_USE_INCLUDE_PATH | FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach($massiv as $v) {
$data = explode("|", $v);
$file = array_shift($data) . '.txt';
$html = preg_replace('/\{DATA([0-9]+)\}/ei', "\$data['$1']", $content);
file_put_contents($file, $html, FILE_USE_INCLUDE_PATH | FILE_APPEND | LOCK_EX);
}
|
|
|
пришел к победе коммунистического труда
|
6
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 30/10/11 в 08:12 |
кстати что это за муть
$html = preg_replace('/\{DATA([0-9]+)\}/ei', "\$data['$1']", $content);
я так и не понял.
но решил не трогать
|
|
пришел к победе коммунистического труда
|
6
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 30/10/11 в 08:13 |
В foo.txt:
imyafaila1|vstavka1|vstavka2|vstavka3|vstavka3
imyafaila2|vstavka1|vstavka2|vstavka3|vstavka3
imyafaila3|vstavka1|vstavka2|vstavka3|vstavka3
Код: | $content = file_get_contents('face.tpl');
$lines = file('foo.txt');
$count = count( $lines );
for( $i = 0; $i < $count; $i += 1 ) {
$data = explode( '|', $lines[ $i ] );
if( ! file_put_contents( $data[0].'.txt', preg_replace( '/\{DATA(\d+)\}/ei', "\$data['$1']", $content ) ) )
die( "can't open file" );
} |
Цитата: | Чет увлек меня ПХП, может так потихоньку научусь делать что то полезное. А то в мелочах еще более менее разбираюсь, а вот что по серьезнее и появляются сложности. |
Что-то "серьёзное" на голом пхп мало кто пишет. Поставь какой-нибудь фреймворк. Изучи его. И будет тебе счастье.
Рекомендую Kohana + Jelly + Twig как достойную базу для средних проектов или мегатехнологичный Fat Free Framework для мелких.
|
|
|
|
С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970
|
Добавлено: 30/10/11 в 11:52 |
FXIX писал: | кстати что это за муть
$html = preg_replace('/\{DATA([0-9]+)\}/ei', "\$data['$1']", $content);
я так и не понял.
но решил не трогать |
А чего непонятного?
Заменяет все {DATA1}, {DATA2}, ... на значения $data[1], $data[2], ...
|
|
|
|
Я держусь там. Счастья мне, уд
С нами с 24.05.05
Сообщения: 16096
Рейтинг: 219
|
Добавлено: 30/10/11 в 15:49 |
капец ) Генерилку галерей на коленке )
|
|
Здесь не место для бесед: грохот на пределе
Как при старте ста ракет, как девятый вал
|
0
|
|
|
no sign
С нами с 25.07.03
Сообщения: 3623
Рейтинг: 1403
|
Добавлено: 30/10/11 в 15:53 |
Yacc писал: | Что-то "серьёзное" на голом пхп мало кто пишет. Поставь какой-нибудь фреймворк. Изучи его. И будет тебе счастье. |
то есть ради кроновского скрипта или демона ты будешь фреймворк юзать? ))
а заметь - backend это как раз и есть обычно именно самое серьезное в нужном месте )
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 30/10/11 в 16:25 |
Человек научиться хочет. На "кроновских" скриптах не научишься. По-крайней мере ничему хорошему точно.
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 30/10/11 в 16:26 |
вобще даже эта генерилка, очень полезная вещица, попробую еще разными вещами ее доработать, за одно паралельно и разбираюсь потихоньку что да как. Порой конечно х.з. правильно делаю или нет, но работает. Знать бы еще правила и что да как должно.
Вобще всем спасибо ща помощь и советы.
Кстати еще интересно стало, вот по этой строке
Код: [развернуть] | $html = preg_replace('/\{DATA([0-9]+)\}/ei', "\$raws['$1']", $content); |
Это всё работает при условии если я буду в шаблон вставлять
{DATA1}{DATA2}...{DATA7}
а если хочу вставлять {meta_title}{meta_description}{text}
тут уже такая вещь с регуляркой не пройдет.
За регулярку огромное спасибо!!!
Вот собственно добавил еще момент (при создании файла, куда будет добавляться заполненый шаблон, в его имени удаляю пробелы и заменяю его на "-")
Вот думаю все это дело организовать через форму.
В ХТМЛ уже сделал исходник, форма для данных, выбор типа генерируемой страницы и выбор сепаратора который делит данные в массиве.
Вот примерно то что сейчас есть:
Код: [развернуть] |
<?php
$content = file_get_contents('face.tpl');
$rash = "php";
$lines = file('data.txt');
$count = count( $lines );
for( $i = 0; $i < $count; $i += 1 ) {
$data = explode( '|', $lines[ $i ] );
$str = $data[0];
$probel = '/[\s]+/';
if( ! file_put_contents( preg_replace($probel, "-", "$str.$rash"), preg_replace( '/\{DATA([0-9]+)\}/ei', "\$data['$1']", $content ) ) )
die( "can't open file" );
}
?>
|
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 30/10/11 в 17:14 |
Код: | <?php
$content = file_get_contents('face.tpl');
$extension = '.php';
$lines = file('data.txt');
$count = count( $lines );
for( $i = 0; $i < $count; $i += 1 ) {
$data = explode( '|', $lines[ $i ] );
$file_name = preg_replace( '/\s+/', '-', trim( $data[0] ) ).$extension;
if( ! file_put_contents( $file_name, preg_replace( '/\{DATA([0-9]+)\}/ei', "\$data['$1']", $content ) ) )
die( "can't open file" );
}
?> |
Мелочи, а приятно.
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 30/10/11 в 18:25 |
gimcnuk писал: | А чего непонятного?
Заменяет все {DATA1}, {DATA2}, ... на значения $data[1], $data[2], ... |
а ну да. просто в первом посте глянул
DATA1|DATA2|DATA3|DATA4|DATA5|DATA6|DATA7
DATA1|DATA2|DATA3|DATA4|DATA5|DATA6|DATA7
DATA1|DATA2|DATA3|DATA4|DATA5|DATA6|DATA7
DATA1|DATA2|DATA3|DATA4|DATA5|DATA6|DATA7
|
|
пришел к победе коммунистического труда
|
0
|
|
|
С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970
|
Добавлено: 31/10/11 в 08:22 |
Lexikon писал: | Кстати еще интересно стало, вот по этой строке
Код: [развернуть] | $html = preg_replace('/\{DATA([0-9]+)\}/ei', "\$raws['$1']", $content); |
Это всё работает при условии если я буду в шаблон вставлять
{DATA1}{DATA2}...{DATA7}
а если хочу вставлять {meta_title}{meta_description}{text}
тут уже такая вещь с регуляркой не пройдет. |
Код: |
$html = preg_replace('/\{([a-z0-9_]+)\}/ei', "\$raws['$1']", $content);
|
{meta_title}{meta_description}{text} меняет на $raws['meta_title'] и т.д.
Ну или Код: |
$html = preg_replace('/\{(\w+)\}/e', "\$raws['$1']", $content);
|
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 01/11/11 в 19:55 |
Попытался сделать это все через форму а не через файл, частично вышло, но столкнулся с проблемой:
Форма
Код: [развернуть] |
<form action="script.php" method="post">
<div style="width: 840px; height: 550px; background-color:#CCE4FF; border: 1px solid #5EAAFF; padding: 10px;"><textarea name="exdata" style="border: 1px solid #84BEFF; width: 820px; height: 500px; font-size: 12px; font-family: Arial, sans-serif;"></textarea>
<div style="width: 365px; padding-top: 10px; float:left; padding-left: 15px; text-align:left;"><b>Seperated by :</b> <input type="text" name="seperated" style="width: 5px;"></div>
<div style="width: 280px; padding-top: 14px; float:left; text-align:left;"><b>Type :</b>
<input type="radio" name="type" value="php"> *.php
<input type="radio" name="type" value="shtml"> *.shtml
<input type="radio" name="type" value="html"> *.html</div>
<div style="width: 60px; padding-top: 10px; float:left;"><input type="reset" value="Reset" style="width: 60px; height: 25px;"></div>
<div style="width: 120px; padding-top: 10px; float:left;"><input type="submit" name="submit" value="Generate" style="width: 84px; height: 25px;"></div></div>
</form>
|
Скрипт
Код: [развернуть] |
<?php
$content = file_get_contents('face.tpl');
$lines = file('data.txt');
$count = count( $lines );
for( $i = 0; $i < $count; $i += 1 ) {
$data = explode( $_POST['seperated'], $lines[ $i ] );
$file_name = preg_replace( '/\s+/', '-', trim( $data[0] ) ).$_POST['type'];
if( ! file_put_contents( $file_name, preg_replace( '/\{DATA([0-9]+)\}/ei', "\$data['$1']", $content ) ) )
die( "can't open file" );
}
?>
|
Немогу сообразить как правильно передать данные из формы в скрипт обработчик, чтоб все работало как с чтением из файла.
Код: [развернуть] | <textarea name="exdata" style="border: 1px solid #84BEFF; width: 820px; height: 500px; font-size: 12px; font-family: Arial, sans-serif;"></textarea> |
Если для файла есть функция чтение из файла в массив по строкам, то функции чтение из формы в массив по строкам вроде нет .
Вторая проблемка это то, что теперь при генерации файлов между названием и расширением теряется точка, как бы я ее не ставил, или ошибка или теряется и х.з. как тут быть.
|
|
|
|
readmode
С нами с 24.05.06
Сообщения: 797
Рейтинг: 488
|
Добавлено: 01/11/11 в 20:05 |
Lexikon: пиши данные из формы в файл, а из файла уже читай
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 01/11/11 в 20:54 |
Код: | <?php
$content = file_get_contents('face.tpl');
$lines = explode( "\n", $_POST[ 'exdata' ] );
$count = count( $lines );
for( $i = 0; $i < $count; $i += 1 ) {
$data = explode( $_POST['seperated'], $lines[ $i ] );
$file_name = preg_replace( '/\s+/', '-', trim( $data[0] ) ).'.'.$_POST['type'];
if( ! file_put_contents( $file_name, preg_replace( '/\{DATA([0-9]+)\}/ei', "\$data['$1']", $content ) ) )
die( "can't open file" );
}
?> |
Надеюсь ты эту форму всем желающим открывать не собираешься.
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 01/11/11 в 20:59 |
нет
это для себя на локалке генерить, она ведь совершенно голая, зачиты и проверки ни какой.
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 01/11/11 в 21:23 |
Yacc писал: | Код: | <?php
if( ! file_put_contents( $file_name, preg_replace( '/\{DATA([0-9]+)\}/ei', "\$data['$1']", $content ) ) )
die( "can't open file" );
}
?> |
|
Цитата: | The function returns the number of bytes that were written to the file, or FALSE on failure. |
|
|
пришел к победе коммунистического труда
|
6
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 01/11/11 в 21:30 |
это ты к чему???
|
|
|
|