Типичная php задача при копировании одинаковых частей кода и сопоставлении нескольких списков.



Страшное название получилось.
Задача действительно типичная и детская. После постановки конкретной задачи ниже все станет понятно.
В закладки однозначно, ибо я уже который раз сталкиваюсь с подобным случаем и каждый раз приходится тратить время на написание детского скрипта.

Задача:
Имеется два списка. В моем случае это были список с названием характеристик инструмента и соответствующий ему список переменных, которые используются в механизме магазина, написанного на php (joomla, virtuemart).

Требуется вставить куски различного php-кода во множество файлов mvc-структуры. В этих кусках кода присутствует это соответствие.

Т.к. список совсем не маленький (около 50 наименований и это в начале) да умножить на 2 (т.к.идет соответствие), да минимум в 4-5 файлах используется различный но «монотонный» код, руками копипастить значит потратить минимум пол-дня на глупости.
Автоматизируем процесс ниже.
Куски списков:
Максимальная нагрузка
Расположение бачка
Материал, Материал бачка
Размер, L x H (мм)
Наружный диаметр
Внутренний диаметр, Ширина пропила
Присоединительная резьба (М)
Присоединительная резьба (F)
Присоединение к шлангу
Быстроразъемное соединение

И соответствующие характеристикам переменные:

roduct_p_maxpressure
product_p_location
product_p_material
product_p_size
product_p_diameterout
product_p_diameterin
product_p_threadm
product_p_threadf
product_p_hose
product_p_quickconnect


Смотрим на готовое решение:

file: pigmalion.php

<!DOCTYPE html>
<html>
 <head>
  <meta charset="cp-1251" />  <!-- or utf-8 -->
  <title>Pigmalion bicycle</title>
 </head> 
 <body>
<?php

$text_array = file("text.txt");
$text_tag_array = file("text-tag.txt"); 

$x=0;
while ($x++<147) {    // 147 it's your number of rows
	if ($x%2 == 0){
		$strvar = 'row2';   // row2, row1 - your class for grid rows
	}
	else 	$strvar = 'row1';
	
$text_array[$x-1] = str_replace("\r\n","",$text_array[$x-1]);
$text_array[$x-1] = str_replace("\n","",$text_array[$x-1]);

$text_tag_array[$x-1] = str_replace("\r\n","",$text_tag_array[$x-1]);
$text_tag_array[$x-1] = str_replace("\n","",$text_tag_array[$x-1]);

echo "
   <tr class=".$strvar.">
      <td>
           ".$text_tag_array[$x-1]."
     </td>
                         ... your code...
      <td>
           ".$text_array[$x-1]."
     </td>

";
}
?>
 </body>
</html>


Запускаем скрипт pigmalion.php через рабочий сервер, не жмуримся, когда на странице появляется непонятно-что, смотрим в исходник, созданной html-страницы, копируем, вставляем куда нам нужно готовые однотипные блоки, сопоставленные по нашим двум спискам.

Разбираем код(кому надо):

<!DOCTYPE html>
<html>
 <head>
  <meta charset="cp-1251" />  <!-- or utf-8 -->
  <title>Pigmalion bicycle</title>
 </head> 
 <body>


html-шапка. Момент с кодировкой не случайно выделил, если ваш сервер настроен «криво», то вам придется поиграться с кодировкой. Пусть это вас не пугает — вариации utf-8, cp-1251 плюс хороший редактор, умеющий переводить из одной кодировки в другую помогут.

$text_array = file("text.txt");
$text_tag_array = file("text-tag.txt");


функция file возвращает нам построчный массив из файла.

$x=0;
while ($x++<147) {    // 147 it's your number of rows
	if ($x%2 == 0){
		$strvar = 'row2';   // row2, row1 - your class for grid rows
	}
	else 	$strvar = 'row1';


Да, 147 — это количество ваших строк. Это же количество строк в обоих списках.
Здесь присутствует заготовка для чередования названия класса при построении полосатой таблицы. $x%2 == 0 — остаток при делении на 2. В четном случае будет 0 (true) и соответственно наоборот. Ниже переменную $strvar подставляем в строки.

$text_array[$x-1] = str_replace("\r\n","",$text_array[$x-1]);
$text_array[$x-1] = str_replace("\n","",$text_array[$x-1]);

$text_tag_array[$x-1] = str_replace("\r\n","",$text_tag_array[$x-1]);
$text_tag_array[$x-1] = str_replace("\n","",$text_tag_array[$x-1]);


str_replace — удаляет все вариации конца строки как для win так и для *nix.


// Start copy-paste our code
echo "
   <tr class=".$strvar.">
      <td>
           ".$text_tag_array[$x-1]."
     </td>
                         ... your code...
      <td>
           ".$text_array[$x-1]."
     </td>

";
// End copy-paste our code
}
?>
 </body>
</html>


Заметьте мы подставили class= $strvar, который будет поочередно меняться и давать нам полосатость в таблице.

Подставляем сопостовимые части $text_tag_array, $text_array из наших списков в требуемый код.

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
Не забываем смотреть статистику:

Яндекс цитирования