Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Подскажите по написанию кода
цитата
26/10/11 в 13:42
 Lexikon
В ПХП не силен, иногда что то простенькое могу сделать. Тут нужна вот такая штуковина.
есть текстовый файлик в котором построчно написаны данные:
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 страницу и в определенные места вставляет эти данные.
Как я понимаю, мне нужно создать шаблон, отметить места в шаблоне чтоб скрипт знал куда вставлять ту или иную переменную. Но как это все собрать воедино не имею понятия. Подскажите в какую сторону рыть. Порой приходиться пару десятков страниц делать, а вручную это очень долго, да и обязательно где то да пропустишь что нибудь.
Вобщем буду благодарен любым подсказкам по теме.
цитата
26/10/11 в 13:48
 Kors
сейчас как раз что то подобное делаю.
там все элементарно на самом деле, если ты не умолчал о каких либо тонкостях icon_smile.gif
скинь пример в личку (или тут опиши) какая например страница и куда что вставляется.
я правильно понял что по каждой строчке своя страница генерится?
цитата
26/10/11 в 17:05
 ibiz
да легко, делается шаблон со вставкой в нужных местах {DATA1}...{DATA7}
затем этот шаблон читается через
$content = file_get_contents('shablon.html');
и делается простая замена через
$content = str_replace('{DATA1}', 'DATA1', $content);
...
$content = str_replace('{DATA7}', 'DATA7', $content);
соответственно DATA1...DATA7 распарсивается со строки через explode trollface.png
цитата
26/10/11 в 17:16
 Kors
icon_smile.gif
цитата
26/10/11 в 17:51
 Alexandur
Нафига такие извращения? str_replace массивы принимает. А у регулярных так вообще - безлимит.

Код:

$raws = explode(...);

$html = preg_replace('/\{DATA([0-9]+)\}/ei', "\$raws['$1']", $content);


ibiz писал:
Осталось 1590 часов

До Нового года?
Тоже очень жду smail54.gif
цитата
26/10/11 в 18:18
 ibiz
gimcnuk писал:
Нафига такие извращения? str_replace массивы принимает. А у регулярных так вообще - безлимит.


учитывал trollface.png
Цитата:
В ПХП не силен, иногда что то простенькое могу сделать.

соответственно регулярки понимать сложнее smail101.gif
у меня тут студенты обучаются и не с первого раза понимают функцию array_chunk, хотя казалось бы чего тут непонятного? trollface.png
цитата
26/10/11 в 19:59
 Lexikon
всем спасибо smail54.gif
цитата
30/10/11 в 07:22
 Lexikon
Ну вот что получилось:

<?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
За ранее благодарен. Чет увлек меня ПХП, может так потихоньку научусь делать что то полезное. А то в мелочах еще более менее разбираюсь, а вот что по серьезнее и появляются сложности.
цитата
30/10/11 в 08:07
 FXIX
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);
}
цитата
30/10/11 в 08:12
 FXIX
кстати что это за муть
$html = preg_replace('/\{DATA([0-9]+)\}/ei', "\$data['$1']", $content);
я так и не понял.
но решил не трогать smail101.gif
цитата
30/10/11 в 08:13
 Yacc
В 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 для мелких.

icon_smile.gif
цитата
30/10/11 в 11:52
 Alexandur
FXIX писал:
кстати что это за муть
$html = preg_replace('/\{DATA([0-9]+)\}/ei', "\$data['$1']", $content);
я так и не понял.
но решил не трогать smail101.gif

А чего непонятного?
Заменяет все {DATA1}, {DATA2}, ... на значения $data[1], $data[2], ...
цитата
30/10/11 в 15:49
 Оборотень
капец ) Генерилку галерей на коленке )
цитата
30/10/11 в 15:53
 arachnO
Yacc писал:
Что-то "серьёзное" на голом пхп мало кто пишет. Поставь какой-нибудь фреймворк. Изучи его. И будет тебе счастье.


то есть ради кроновского скрипта или демона ты будешь фреймворк юзать? ))
а заметь - backend это как раз и есть обычно именно самое серьезное в нужном месте )
цитата
30/10/11 в 16:25
 Yacc
Человек научиться хочет. На "кроновских" скриптах не научишься. По-крайней мере ничему хорошему точно. icon_smile.gif
цитата
30/10/11 в 16:26
 Lexikon
вобще даже эта генерилка, очень полезная вещица, попробую еще разными вещами ее доработать, за одно паралельно и разбираюсь потихоньку что да как. Порой конечно х.з. правильно делаю или нет, но работает. Знать бы еще правила и что да как должно.
Вобще всем спасибо ща помощь и советы.
Кстати еще интересно стало, вот по этой строке
$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" );
}

?>
цитата
30/10/11 в 17:14
 Yacc
Код:
<?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" );
}

?>


Мелочи, а приятно. icon_smile.gif
цитата
30/10/11 в 18:25
 FXIX
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
цитата
31/10/11 в 08:22
 Alexandur
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);
цитата
01/11/11 в 19:55
 Lexikon
Попытался сделать это все через форму а не через файл, частично вышло, но столкнулся с проблемой:
Форма

<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>

Если для файла есть функция чтение из файла в массив по строкам, то функции чтение из формы в массив по строкам вроде нет icon_confused.gif .
Вторая проблемка это то, что теперь при генерации файлов между названием и расширением теряется точка, как бы я ее не ставил, или ошибка или теряется и х.з. как тут быть.
цитата
01/11/11 в 20:05
 hellshouter
Lexikon: пиши данные из формы в файл, а из файла уже читай trollface.png
цитата
01/11/11 в 20:54
 Yacc
Код:
<?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" );
}

?>


Надеюсь ты эту форму всем желающим открывать не собираешься. icon_smile.gif
цитата
01/11/11 в 20:59
 Lexikon
smail101.gif нет
это для себя на локалке генерить, она ведь совершенно голая, зачиты и проверки ни какой.
цитата
01/11/11 в 21:23
 FXIX
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.
цитата
01/11/11 в 21:30
 Lexikon
это ты к чему???
Стр. 1, 2  >  последняя »


Эта страница в полной версии