- Генерация html на PHP
- php автоматически создает код в том же файле
- Настройка генерации кода Phpstorm
- Избавление от комментария по умолчанию для новых PHP-файлов
- Компактные блоки документов для переменных экземпляра.
- Фиксация размещения ковра
- Использование полных имен классов в блоках документов.
- Изменение видимости по умолчанию
- Сохранение настроек в репозитории Git
- В заключение
- Читайте ещё по теме:
- Автоматическое создание страниц
Генерация html на PHP
Предлагаю вашему вниманию свое решение по генерации html на PHP. Задача вроде бы тривиальная, но хотелось бы, чтобы это было расширяемо, кратко, но в тоже время с хорошим функционалом. Получилось вроде не плохо.
Сразу скажу( как многие считают в комментариях), что задача ставилось не написать шаблонизатор (которых и так много) и не заменить шаблонизатор JavaScript. Я прекрасно знаю, что true way это разделять html и данные. Но мне понадобилось писать html в классах, для создания компонентов фреймворка, на подобие CGridView в yii, стоит ли в таких местах выносить html в отдельные файлы решать вам.
Основная цель, избавится от html в классах и функциях.
Простой пример, обычная кнопка:
CHtml::create() ->p() ->a(array('href' => 'http://habrahabr.ru', 'class' => 'btn')) ->text('Перейти') ->render();
Ничего хитрого, можно было бы этим и ограничется, но захотелось циклы:
$arr = array('1' => 'Первый', '2' => 'Второй'); CHtml::create() ->select($options) ->each(CHtml::plainArray($arr, 'value', 'text')) ->option('array("value" => $data->value)') ->text('$data->text') ->end() ->endEach()
$arr = array( array('value' => '1', 'text' =>'Первый'), array('value' => '2', 'text' => 'Второй') );
Теги внутри цикла могут содержать функции или строки с eval выражениями, вложенность любая, пример с таблицей:
$columns = array( array('id' => 'NAME', 'label' => 'Имя'), array('id' => 'AGE', 'label' => 'Возраст') ); $data = array( array('NAME' => 'Петр', 'AGE' => 29), array('NAME' => 'Василий', 'AGE' => 32) ); CHtml::create() ->table() ->thead() ->tr() ->each($columns) ->th() ->text(function($column)< return $column['label']; >) ->end() ->endEach() ->end() ->end() ->tbody() ->each($data) ->tr() ->each($columns) ->td() ->text(function($row, $column) < return $row[$column['id']]; >) ->end() ->endEach() ->end() ->endEach() ->render();
Незакрытые теги закрываются автоматически.
Класс можно расширить, вплоть до использования в формах. Расширить можно за счет наследования или внедрения зависимости, за то, как будет выводится каждый тег и его атрибуты используется одна функция, поэтому можно легко переопределить это поведение.
class CMyHtml extends CHtml < public function a($options = array()) < $default = array( 'href' =>'javascript:void(0)' ); return parent::a(array_replace($default, $options)); > >
class CForm < private $_lastLabel = ''; public function __construct(CModel $model, CHtml $html = null) < $this->_model = $model; $this->_html = $html ?: CHtml::create(); > public function __call($method, $ps) < $options = $ps ? $ps[0]: array(); if ($method === 'label') < $this->_lastLabel = isset($options['for']) ? $this->_model->getLabel($options['for']) : ''; > if ($method === 'text' && $this->_lastLabel) < $options = $options ?: $this->_lastLabel; $this->_lastLabel = ''; > $this->_html->$method($options); return $this; > >
Само решение можно посмотреть и попробовать на github.
php автоматически создает код в том же файле
Я хочу сгенерировать тот же код в том же файле, который содержит этот код по указанному номеру строки, возможно ли это? Вышеупомянутый скрипт php генерирует следующий код в новом файле http://tinypaste.com/ff242cd6
$path = "./files/";
$path2="http://".$_SERVER['SERVER_NAME'].dirname($_SERVER["PHP_SELF"])."/files/";
//echo $path2;
$folder = opendir($path);
$start="\n"; ";
$Fnm = "./playlist.php";
// build content
$fileContent=$start.'/n';while( $file = readdir($folder) ) if (($file != '.')&&($file != '..')&&($file != 'index.htm')) $result="
\n\n\n\n \n";
//append to content
$fileContent .= $result;
>
>
//append to content
$fileContent .= "// append to file and check status
if ( file_put_contents(__FILE__ , $fileContent , FILE_APPEND) === false )
echo "failed to put contents in ".__FILE__."
";>
Это должно сделать это. РЕДАКТИРОВАТЬ: Хорошо, прежде чем я войду в него, вы должны сначала взглянуть на некоторые базовые уроки PHP, которые можно найти по всей сети. SO, вместо того, чтобы записывать содержимое в файл, просто эхо его и добавляйте свои динамические материалы, пока вы эхо:
$title='the title of your playlist';$start="
\n/n"; while( $file = readdir($folder) ) if (($file != '.')&&($file != '..')&&($file != 'index.htm')) $result="
\n\n\n\n \n";
>
>$endCont = $start.$result."";
echo $endCont;
Я создал новую переменную под названием $title . Значением этого будет заголовок, сгенерированный на выходе. Вы можете сделать это с помощью других тегов, также как и с
Настройка генерации кода Phpstorm
Я использую PhpStorm уже довольно давно, но никогда не предпринимал усилий, чтобы исправить несколько незначительных проблем… С тегом php, phpstorm.
Я использую PhpStorm уже довольно давно, но никогда не прилагал усилий, чтобы исправить несколько мелких неприятностей, которые у меня были с ним.
Избавление от комментария по умолчанию для новых PHP-файлов
Во-первых, при создании нового PHP-файла или класса вы PhpStorm добавите этот блок комментариев по умолчанию следующим образом:
/** * Created by PhpStorm. * User: freek * Date: 2018-11-25 * Time: 23:44 */
Конечно, вы можете вручную удалить этот блок (это то, что я тоже делал), но еще лучше настроить PhpStorm так, чтобы этот блок вообще не создавался.
Если вы хотите избавиться от этого блока навсегда, перейдите к Шаблоны файлов и кода раздел в настройках. Там перейдите в PHP-файл и удалите #parse(«PHP-файл Header.php «) строка. К тому же для PHP класса .
Результат должен выглядеть так:
В качестве альтернативы вы можете перейти к заголовку файла PHP и удалить все содержимое.
Попробуйте создать новый PHP-файл или класс прямо сейчас. Блока комментариев там больше не будет.
ОБНОВЛЕНИЕ: в более новых версиях PhpStorm больше не будет комментариев по умолчанию
Приятно, что на тебя повлияли @phpstorm немного ☺️ @phpstorm немного ☺️ Запись в блоге: https://t.co/0noKDyVGPS
Компактные блоки документов для переменных экземпляра.
При создании конструктора нового класса в PhpStorm вы можете автоматически инициализировать параметры. Просто нажмите alt + ввод пока курсор находится на переменной. При этом откроется диалоговое окно, позволяющее автоматически сгенерировать переменную экземпляра.
В результате получается что-то вроде этого:
Хорошо, но что мне не нравится в автоматически сгенерированном коде, так это многострочный докблок. К счастью, это можно исправить, перейдя в Настройки > Шаблоны файлов и кода > PHP Поле Doc Комментарий и настройте шаблон по своему вкусу. Вот как выглядит мой шаблон:
Это сделает автоматически созданный вид таким.
Фиксация размещения ковра
Вы можете легко создать новый класс с помощью действия Новый PHP-класс . PhpStorm спросит название класса. К сожалению, когда файл будет создан, курсор не будет находиться внутри созданного класса. Давайте и это исправим!
В Шаблоны файлов и кода > Класс PHP тип # [[$КОНЕЦ$]] # # где вы хотите быть после создания класса PHP. Также установите флажок Включить живые шаблоны
Попробуйте создать новый класс прямо сейчас. Курсор должен быть расположен внутри вашего класса.
Использование полных имен классов в блоках документов.
При автогенерации docblock для переменных экземпляра, которые являются классами, PhpStorm будет использовать короткое имя класса. Если вы, как и я, предпочитаете полное название класса, просто отметьте Используйте полные имена классов в PHPDoc настройки.
Изменение видимости по умолчанию
Для моего кода я предпочитаю использовать защищенные переменные экземпляра. По умолчанию PhpStorm будет использовать private . Вы можете изменить видимость по умолчанию на экране Генерация кода .
Сохранение настроек в репозитории Git
Возможно, вы захотите сделать резервную копию этих настроек. Или, если вы используете несколько компьютеров, вы хотели бы синхронизировать все настройки. К счастью, у PhpStorm есть поддержка для этого. Он может синхронизировать все свои настройки с репозиторием Git.
Во-первых, начните создавать репозиторий на GitHub (или альтернативный сервис). Затем выберите Файл > Хранилище настроек и мимо вышестоящего URL-адреса в этом диалоговом окне. Нажмите Перезаписать удаленный первый раз, чтобы записать все ваши настройки в репозиторий.
Если вы автоматически хотите синхронизировать настройки, перейдите в раздел Настройки > Инструмент > Хранилище настроек и убедитесь, что Флажок Автоматическая синхронизация установлен.
В заключение
Это лишь некоторые из опций, которые PhpStorm предлагает для автоматической генерации кода. Я настоятельно рекомендую просмотреть все Редактор > PHP настройки и установите все по своему вкусу.
Читайте ещё по теме:
Автоматическое создание страниц
Только начинаю изучать php, последние 2-е суток без остановки читаю и в голове одна каша.
Помогите пожалуйста вот с каким вопросом: допустим, у нас есть база данных со списком квартир, где поля id, adres, kolvokvar итд. Также допустим, что их там 1000.
Каким образом сделать так, чтобы автоматически создалось 1000 страниц по определенному шаблону с урлом, например, site.ru/kvartira1, site.ru/kvartira2 итд. информацию бралась при этом бы из бд.
Автоматическое создание страниц?
Всем привет. Только начинаю изучать php, последние 2-е суток без остановки читаю и в голове одна.
Автоматическое создание страниц
Сделал страницу добавления товара. Как сделать, чтобы для каждого товара создавалась страница.
Автоматическое создание страниц на сайте
Всем привет, подскажите пожалуйста как можно сделать так , что б в админке сайта по нажатию на.
Автоматическое создание PHP страниц в БД, и их вывод
Я хочу реализовать такую систему, как например в ВК, или одноклассниках. Как можно при отправлении.
if(isset($_GET["q"])) $file = функция($_GET["q"]);?> if(is_array($file)):?>
Пишем функцию получения данных из бд и шаблон.
Переходим по site.ru/index.php?q=kvartira2 либо по site.ru/index.php?q=kvartira223 выходит один и тот же шаблон, но с разными данными.
Добавлено через 2 минуты
Ссылки можно сократить через htaccess, будут в таком виде: site.ru/kvartira2
Можно и без GET-параметров обойтись (https://www.cyberforum.ru/php/thread1633519.html). В остальном все правильно: страницы будут создаваться динамически при их запросе (есть еще такая вещь, как кэширование, но для простоты это пока отбросим). Но это все нужно написать. Например, чтобы можно было завести в роутер адресный шаблон /kvartira, повесить на него соответствующий обработчик и шаблон страницы.
Добавлено через 1 минуту
wealqa, кидайте мыло. Пришлю какой-нибудь простой пример.
miketomlin, wealochka[@]yandex.ru
Добавлено через 12 часов 55 минут
dukesov, скиньте правильный пример подобного, пожалуйста. правильный вывод хотя бы 2-х полей
Добавлено через 16 минут
попробовал. дикая дичь получилась, так ведь?
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
require_once 'connection.php'; $link = mysqli_connect($host, $user, $password, $database) or die("Ошибка " . mysqli_error($link)); $query ="SELECT * FROM tovars"; if(isset($_GET["q"])) $file = ($_GET["q"]);?> if(is_array($file)) { $result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link)); if($result) { $rows = mysqli_num_rows($result); echo "Id Модель Производитель "; for ($i = 0 ; $i $rows ; ++$i) { $row = mysqli_fetch_row($result); echo ""; for ($j = 0 ; $j 3 ; ++$j) echo "$row[$j] "; echo " "; } echo "
"; // очищаем результат mysqli_free_result($result); } mysqli_close($link); } else } echo "такой страницы не существует"; ?>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// Функция получения параметров файла function GetFileByName($fileName = NULL) { if ($fileName) { $fileName = mysql_real_escape_string($fileName); $query = "SELECT * FROM `таблица` WHERE `колонка` = '$fileName'"; $res = mysql_query($query); if ($res) { if ($row = mysql_fetch_assoc($res)) { return $row; } else { return "Файл с таким именем не найден!"; } } else { return "Could not successfully run query ($query) from DB: " . mysql_error(); } } }
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
@include ($_SERVER['DOCUMENT_ROOT'].'/include/functions.php');?> if(isset($_GET["p"])) $file = GetFileByName($_GET["p"]);?> if(is_array($file)):?> $file["title"]?>
$file["description"]?> else:?> К сожалению, запрошенная Вами информация не существует.
Попробуйте задать запрос еще раз. endif?>
Добавлено через 3 минуты
Подставь свои данные и попробуй. Пишешь сайт.ру/index.php?p=
После знака = просто пишешь слово которое есть в колонке, по которой делаешь отбор в функции.