Как сделать стили в php

Обновлено: 07.07.2024

Когда вы разрабатываете свой модуль, то иногда прибегаете к помощи верстки (HTML и CSS) и дополнительным скриптам.

Все это можно подключать отдельно – что-то в теле страницы, что-то в отдельных файлах. Но некоторые дополнения лучше вставлять непосредственно в сам PHP-файл.

Сегодня я покажу два варианта, как можно вставить HTML, CSS или JavaScript в код PHP.

Первый вариант вставки элементов в PHP-код

Вот с помощью него и можно вывести один из перечисленных ранее кодов. Пример:

На что здесь стоит обратить внимание? Кавычки. Если вы используете внешние кавычки в виде " ", то внутренние кавычки элементов должны быть ' ' и наоборот, иначе вы получите ошибку. Если вы принципиально хотите использовать одинаковые и внешние, и внутренние кавычки, то во внутренних ставьте знак экранизации:

В этом случае все будет работать корректно.

Второй вариант вставки элементов в PHP-код

Сюда вы можете вставлять любой элемент, будь то HTML-код или же JavaScript. Кавычки здесь не играют роли (можете вставить любые), а по желанию можно внедрить переменные для вывода:

Этот пост как заметка, ради самодисциплины и порядка в коде, не полный копипаст какого-то стиля, а сборная солянка стилей оформления кода PHP из PSR-1,2, BSD и Битрикс, которая нравится и привычна лично мне, но в большей степени это стиль Алмена (Eric Allman) или стиль BSD.

Оглавление

1. Общие рекомендации

1.1. Файлы

  • В файлах использовать только теги и .
  • Закрывающий тэг ?> необходимо удалять из файлов, которые содержат только код PHP.
  • В файлах использовать только UTF-8 без BOM.
  • Все PHP файлы заканчивать одной пустой строкой.
  • Для подключения файлов используйте require_once() .

1.2. Строки

  • В качестве отступов использовать табуляцию длиной равной 4.
  • Длина строки кода 80-120 символов, жестко ограничивать не надо.
  • Использовать пустые строки для улучшения читаемости и обозначения связанных блоков/логических сегментов кода.
  • Нельзя писать на одной строке более одной инструкции.

1.3. Именования

Всем файлам, переменным, константам, функциям, классам и методам давать "говорящие" названия, чтобы они отражали свою суть, а не были набором из 2-3 символов.

Простые переменные писать строчными (в нижнем регистре).
Составные имена переменных писать в верблюжьей нотации, где первое слово начинается с маленькой буквы, все остальные с большой в стиле сamelCase .
Для явного указания типа переменной использовать префикс отражающий их тип - $dbUser, $obUser, $arUser, $strUser, $bUser. и т.д.

Имена констант и глобальных переменных всегда должны быть в верхнем регистре в стиле UPPER_CASE .
Составные имена констант разделять символом подчеркивания.
В качестве префикса в именах констант должно использоваться имя пакета/класса, в котором они используются.

Функции/методы класса писать в верблюжьей нотации, где первое слово начинается с маленькой буквы, все остальные с большой в стиле сamelCase() .
В функциях/методах класса использовать префиксы: is (обозначение вопроса), get (получить значение), set (установить значение).

Имена классов в стиле StudlyCaps .
Каждое слово в имени класса с большой буквы и никаких символов, кроме букв латинского алфавита.

2. Процедурное программирование

2.1. Основы синтаксиса

Многострочный комментарий в стиле С (/* */) использовать либо вначале файла, для его описания, либо для временного комментирования участка кода.
Однострочный комментарий в стиле C++ (// ) использовать можно везде.
Комментарии писать грамотно с заглавной буквы и делать отступ в один пробел слева, кроме однострочных.

В качестве отступов использовать табуляцию длиной равной 4-м и не лепить код к левому краю.

Ключевые слова PHP true , false , null писать в нижнем регистре.

Операторы, ключевые слова, круглые и фигурные скобки отделять пробелами.

Нельзя писать на одной строке более одной инструкции.

Нет необходимости ставить точку с запятой в конце последней строки блока с PHP-кодом.


Это тоже будет проигнорировано PHP и отображено браузером.


В строке html-кода подставлять переменные по возможности используя апострофы и конкатенацию, а не двойные кавычки или фигурные скобки.

Придерживаясь ограничения длины строки 80-120 символов использовать конкатенацию и перенос строк.

echo ' '
. ' ' . $arItem['DETAIL_PAGE_URL'] . ' '
. '

' . $arItem['PRICE'] . '

'
. ' ' . $arItem['СURRENCY'] . ' '
. ' ' . $arItem['IBLOCK_SECTION_ID'] . ' '
. ' ' . $arItem['DELIVERY'] . ' '
. ' ' . $arItem['NAME'] . ' '
. ' ';

В тернарном операторе заключать в скобки только условие, при сложном условии стоит заменить его на if/else . И не стесняться его использовать.

Короткие строки писать выше длинных.

2.2. Переменные

Простые переменные пишем строчными в нижнем регистре.

Составные переменные в верблюжьем стиле, где первая буква строчная, а каждое следующее логическое слово (аббревиатура) начинается с большой буквы.

Для явного указания типа переменной использовать префикс отражающий их тип:
$bUser, $intUser, $flUser, $strUser, $dbUser, $obUser, $arUser и т.д.

//Строки с префиксом str
$strName, $strLastName

//Массивы с префиксом ar
$arResult, $arParams, $arUser

//Объекты с префиксом ob
$obElement, $obUser

//Объекты БД CDBResult с префиксом db
$dbUser, $dbResult

При множественной инициализации переменных выравнивать значения между ними по правому краю используя доп. пространство.

2.3. Константы и глобальные переменные

  • Имена констант и глобальных переменных всегда должны быть в верхнем регистре.
  • Составные имена констант писать с подчеркиваниями для разделения слов.
  • В качестве префикса в именах констант должно использоваться имя пакета/класса, в котором они используются.

//Глобальные переменные
global $HOST, $SITE_ID, $CACHE_MANAGER;

2.4. Массивы

Массивы форматировать в таком виде.

array(
'ID' => GetMessage('ID'),
'CRM_HOST' => GetMessage('CRM_HOST'),
'CRM_LOGIN' => GetMessage('CRM_LOGIN'),
'CRM_PASSWORD' => GetMessage('CRM_PASSWORD'),
'CRM_AUTH' => GetMessage('CRM_AUTH'),
'CRM_PORT' => GetMessage('CRM_PORT'),
'CRM_PATH' => GetMessage('CRM_PATH'),
);

2.5. Функции

  • При вызове функции пробелы между названием функции и открывающей круглой скобкой недопустимы.
  • Пробелы после открывающей круглой скобки и перед закрывающей недопустимы.
  • В списке аргументов необходим один пробел после каждой запятой и недопустимы пробелы перед запятыми.
  • Тело функции в одну строку при одном выражении писать с фигурными скобками.

//Вызов функции
getFunction();

Большой список аргументов можно разбивать на несколько строк с одним отступом/табуляцией.
Первый аргумент также переносить на следующую строку и в каждой строке должен быть только один аргумент.

2.6. Управляющие конструкции

  • Между ключевым словом и открывающей круглой скобкой один пробел;
  • Между закрывающей круглой скобкой и открывающей фигурной скобкой один пробел;
  • Тело управляющей конструкции смещать на один отступ/таб;
  • Тело каждой управляющей конструкции заключать в фигурные скобки;
  • Открывающую и закрывающую фигурные скобки с новой строки;
  • Пробелы между круглыми скобками и их содержимым в условии недопустимы;
  • Не экономить вертикальное пространоство, если это позволяет монитор.
  • Вместо else if лучше использовать слитное elseif , чтобы избежать проблем в условиях с двоеточием.

Допустимы два вида написания конструкций:

если тела всех инструкций состоят из одного выражения, то фигурные скобки опускаем:

если тело хотя бы одной из частей состоит более чем из одного выражения, то необходимы скобки у всех инструкций:

Открывающую фигурную скобку ставить под началом выражения и на одном уровне вертикально с закрывающей

Избегать лишних фигурных скобок если в условии/блоке одно выражение.

2.6.1. if, elseif, else

//Правильно, но не рекомендуется :
if($a > $b):
echo $a." больше, чем ".$b;
elseif($a == $b): // Заметьте, тут одно слово.
echo $a." равно ".$b;
else:
echo $a." не больше и не равно ".$b;
endif;

2.6.2. switch, case

Простой switch с одним выражением пишем без фигурных скобок в case , иначе выражение в case заключаем в фигурные скобки.

Где нет break пишем комментарий вроде //no break .

switch ($expr)
case 0:
echo 'Первый case, заканчивается на break';
break;
case 1:
echo 'Второй case, с умышленным проваливанием';
//no break
case 2:
case 3:
case 4:
echo 'Третий case, завершается словом return вместо braek';
return;
default:
echo 'По-умолчанию';
break;
>

2.6.3. while, do while

2.6.4. for

2.6.6. try, catch

3. Объектно-ориентированное программирование

3.1. Пространства имён и оператор use

  • После объявления пространства имен namespace необходима одна пустая строка.
  • Оператор use должен быть после объявления простарнства имён namespace .
  • На одно объявление (импорт или создание псевдонима) использовать только один оператор use.
  • После блока операторов use должна быть одна пустая строка.

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

3.2. Классы, свойства и методы

  • Имена классов в стиле StudlyCaps .
  • Каждый класс должен располагаться в отдельном файле и находиться в пространстве имён как минимум первого уровня.
  • Открывающую и закрывающую фигурные скобки класса должны быть с новой строки.

class ClassName
//константы, свойства, методы
>

3.2.1 Extends и implements

Ключевые слова extends и implements располагать на одной строке с именем класса.

Список implements можно разбить на несколько строк, каждая из которых с одним отступом, при этом, первый интерфейс в списке необходимо перенести на следующую строку, и в каждой строке указать только один интерфейс.

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements
\ArrayAccess,
\Countable,
\Serializable
//константы, свойства, методы
>

3.2.2. Константы

  • Имя константы класса всегда должно быть в верхнем регистре.
  • Составные имена констант разделять символом подчеркивания.
  • В качестве префикса в именах констант может использоваться имя пакета/класса, в котором они используются, например: BX_FILE_PERMISSIONS, API_FILE_PERMISSIONS

class Version
const VERSION = '15.0.1';
const VERSION_DATE = '2014-11-12 09:00:00';
>

3.2.3. Свойства

  • Для всех свойств и методов класса необходимо объявлять область видимости public, static, protected, private;
  • Разделять пустой строкой константы и группы свойств по области видимости.
  • Недопустимо использовать ключевое слово var для объявления свойств.
  • Недопустимо в одном объявлении указывать более одного свойства.
  • Не следует начинать название свойства с подчёркивания для обозначения приватной или защищённой видимости.

class Foo
const HTTP_1_1 = "1.1";
const HTTP_GET = "GET";
const HTTP_POST = "POST";

public $foo = null;
public $bar = array();

protected $proxyHost;
protected $proxyPort;
protected $proxyUser;
protected $proxyPassword;
>

3.2.4. Методы

  • Имя метода пишется в верблюжьей нотации, где первое слово начинается с маленькой буквы, все остальные с большой в стиле сamelCase() .
  • Для всех методов класса необходимо объявлять область видимости public, static, protected, private;
  • В методах класса использовать префиксы: is (обозначение вопроса), get (получить значение), set (установить значение).
  • Открывающая и закрывающая фигурные скобки должны быть с новой строки и на одном уровне.
  • Недопустимо объявлять методы с пробелом между названием и круглой скобкой.
  • Недопустимо добавлять пробел после открывающей круглой скобки и перед закрывающей.
  • Недопустимо начинать название метода с подчёркивания для обозначения приватной или защищённой видимости.

В примере ниже обратите внимание на расположение запятых, пробелов, круглых, квадратных и фигурных скобок.

class ClassName
public function getMark($arg1, &$arg2, $arg3 = [])
//тело метода
>
>

3.2.5. Аргументы методов

  • В списке аргументов необходим один пробел после каждой запятой и недопустимы пробелы перед запятыми.
  • Аргументы метода со значениями по-умолчанию располагать в конце списка аргументов.

class ClassName
public function foo($arg1, &$arg2, $arg3 = [])
//тело метода
>
>

  • Большое количество аргументов необходимо разбивать на несколько строк, каждая из которых с одним отступом/табуляцией слева.
  • Первый аргумент в списке также необходимо переносить на следующую строку и в каждой строке должен быть только один аргумент.
  • Когда список аргументов разбит на несколько строк, закрывающую круглую скобку и открывающую фигурную необходимо располагать на разных строках, в соответствии с общим форматирование скобок.

class ClassName
public function aVeryLongMethodName(
ClassTypeHint $arg1,
&$arg2,
array $arg3 = []
)
//тело метода
>
>

  • Стараться избегать большого количества аргументов, гораздо удобней делать так:

3.2.6. abstract, final и static

  • Ключевые слова abstract и final пишутся перед модификаторам видимости.
  • Ключевое слово static пишется после модификатора видимости.

abstract class ClassName
protected static $property;

abstract protected function foo();

final public static function bar()
//тело метода
>
>

3.2.7. Вызов методов

  • При вызове метода пробелы между названием метода и открывающей круглой скобкой недопустимы.
  • Пробелы после открывающей круглой скобки и перед закрывающей недопустимы.
  • В списке аргументов необходим один пробел после каждой запятой и недопустимы пробелы перед запятыми.
    Большой список аргументов можно разбивать на несколько строк с одним отступом/табуляцией.

4. Работа с БД

4.1. Стиль написания запросов

  • Запрос необходимо обрамлять двойными кавычками;
  • Названия таблиц, полей и алиасов в нижнем регистре (в Битрикс поля в верхнем регистре);
  • Все операторы и служебные команды БД пишем в верхнем регистре;
  • Таблицы и поля нужно обрамлять обратными кавычками, а алиасы и префиксы не надо обрамлять;
  • "Целые числа" не надо обрамлять кавычками.

Простые запросы пишем в одну строку

Сложные составные запросы необходимо писать в несколько строк, чтобы видеть в какой строке ошибка, и не объединять строки конкатенацией.

$connection = Bitrix\Main\Application::getConnection();
$sqlHelper = $connection->getSqlHelper();

$sql = "INSERT INTO `".$this->table."`
SET `DATE` = NOW(),
`TITLE` = '".$sqlHelper->forSql($_title)."',
`KEYWORDS` = '".$sqlHelper->forSql($keywords)."',
`DESCRIPTION` = '".$sqlHelper->forSql($description)."',
`DETAIL_TEXT` = '".$sqlHelper->forSql($detail_text)."',
`ACTIVE` = 1
WHERE `SECTION_ID` = 1
AND `ELEMENT_ID` = 1024
GROUP BY `NAME`
ORDER BY `ID`
";

5. Формат документации

  • Все комментарии/блоки документации должны быть на английском языке.
  • Все блоки документации "doc-блоки" должны быть совместимы с форматом phpDocumentor
  • Необходимо описывать в стиле PHPDoc все функции, файлы с классами, сами классы и их публичные методы.

5.1. Файлы

Каждый файл, содержащий PHP-код и класс должен иметь заголовочный doc-блок в начале файла, содержащий следующие phpDocumentor-теги.

Минимальный doc-блок для файла.

/**
* Created by Tuning-Soft
*
* @package API
* @subpackage CAPIReviews
* @copyright © 1984-2015 Tuning-Soft
* @version 1.0.0
*/

5.2. Классы

Каждый класс должен иметь doc-блок, содержащий следующие phpDocumentor-теги:

Минимальный doc-блок для класса.

/**
* Class HostRestriction
*
* @since 14.0.6
* @version Release: @package_version@
* @package Bitrix\Security
*/

5.3. Функции/методы

  • Каждая функция/метод класса должна иметь doc-блок, содержащий как минимум:
    • Описание функции
    • Все аргументы
    • Все возможные возвращаемые значения

    Пример doc-блока для функции/метода:

    /**
    * Checking host by host restriction policy
    *
    * @param string $host Host for checking.
    *
    * @return bool Return true for valid (allowed) host.
    * @throws \Bitrix\Main\ArgumentTypeException
    */
    public function isFoo($host)
    /* some PHP-code */

    6. Заключение

    Рекомендую, особенно новичкам, изучить стиль и придерживаться его с самого начала, потом будет тяжелее привыкать, т.к. уже выработается железная привычка писать, как попало и где придется.

    Стиль хорош для всех, но чаще всего есть разница между именованием функций, классов, переменных и переносом фигурных скобок.
    К именованиям можно привыкнуть, они практически идеальны, логичны, понятны, а вот с переносом скобок точно возникнет метание, что лучше, вот так:

    - В первом случае мы расходуем вертикальное пространство, но так лучше ориентироваться новичкам по вертикальным линиям, которые подсвечивает IDE для открывающей/закрывающей фигурных скобок, и вложенность условий будет наглядна.

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

    При работе с одним шаблоном столкнулся с множественным редактирование цветовых значений в файлах CSS ( готовый шаблон и что бы поменять какой то цвет для набора элементов приходится по 20-30 правок делать) решил сделать это всё через переменные.
    Но поскольку пока современные решения новы и далеко не все браузеры поддерживают разные новые решения, решил через PHP попробовать сделать

    Для начала на локальном Опен серевере, настройки вроде все по умолчанию (апач 2.4 пхп 5.6)
    Создал домен для шаблона (Html CSS JS PHP для отправки почты с формы)
    создал в корне домена файл .htaccess в него прописал

    что бы работал ПХП в файлах .html .htm .css
    в файле style.css в самом верху прописал

    и без пробела, после Content-Type: пробовал

    в итоге не подключаются стили, шаблон ломается как только правку в .htaccess делаю

    Подскажите что не так делаю или что посмотреть по этому вопросу? Куда копать?
    Интересует сейчас настроить это локально на опенсервере, ну и потом понимать как это всё (подключение в css php переменных) повторить на хостинге

    всем заранее спасибо

    Andrio:

    что бы работал ПХП в файлах .html .htm .css

    А не проще ли (и безопаснее) просто писать стили в php файле?)

    Andrio:

    Но поскольку пока современные решения новы и далеко не все браузеры поддерживают разные новые решения, решил через PHP попробовать сделать

    Andrio:

    Подскажите что не так делаю или что посмотреть по этому вопросу? Куда копать?

    Изначальная идея кривая..
    Ну а по сути, как и написано выше, писать стили сразу в php файле, типа:

    Или, как вариант, стили темы писать в самом коде страницы.. там-то проблем не должно возникнуть..)

    Или, как я считаю - самый правильный вариант, стили темы вынести в отдельные файлы (каждую тему в свой отдельный файл) и подключать по условию, дополнительно к основной таблице.
    Такое решение будет самым верным и грамотрным, так как стили кешируются..

    В правильности твоих советов сомнений нет )))

    Просто вот интересно, вроде весьма простое и неприхотливое решение, то что нашёл в интернете - этот пример
    делал по одному видосу, там правда на простом примере всё показывалось . я в итоге решил проверить всё
    т.е создал простую страницу хтмл и ксс стили к ней с кодом ( на том же домене в опенсервере)
    страница

    значения хранятся в базе данных. Что меня смущает, так это то, что лучше всего это сделать: используя PHP-скрипт или CSS или даже javascript. Я хочу, чтобы он был изменен на основе значения CSS из моей базы данных, которое я могу изменить снова, когда мне это нужно (с помощью php-скрипта). Возможно, этот вопрос слишком общий, но, пожалуйста, дайте мне несколько сценариев, которые я могу выполняйте его хорошо. Спасибо за любую помощь.

    во-первых, измените расширение файла с (например) style.css для стиля.РНР. Затем добавьте это в первую строку вашего css:

    и после этого вы можете определить значение фона в качестве переменной и легко изменить его.

    и в вашем php-файле:

    Я думаю, что это то же самое для обоих способов.

    Если вы хотите использовать php, вам придется использовать встроенный css или тег стиля и его простой.

    сделайте страницу php в этой write

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

    Как только вы сохраните свои значения, вам нужно будет создать файл для изменения DOM с помощью JavaScript. Вот хорошая отправная точка, созданная Mozilla Разработчики:

    причина, по которой я предлагаю использовать JavaScript для достижения этого, - это возможность прослушивания событий и изменения клиентской стороны в ответ. Надеюсь, это поможет.

    по причинам ремонтопригодности и гибкости я хочу предложить интерфейс, а не бэкэнд-решение (также потому, что до сих пор никто этого не предлагал).

    Мне особенно нравится подход, принятый в захваты библиотека, где вы можете скомпилировать шаблон CSS, передавая переменные в качестве входных данных (т. е. цветов), и получить CSS для использования. Все это может произойти в браузере. И Вы можете использовать ручки для HTML-шаблонов.

    Как я уже упоминал в комментарии, видео самое лучшее введение к сжатиям.

    также обратите внимание, что если вы хотите использовать ручки в бэкэнде, вы можете - но это библиотека JS, поэтому она не будет идеально вписываться в ваше решение PHP.

    импортируйте свою базу данных здесь в css или включите страницу db;

    и что-то вроде этого вы сможете изменить цвет фона, используя значение, хранящееся в базе данных

    и хотя ошибок не было, стиль не применялся. Как я могу добиться успеха в этом, пожалуйста.

    Что касается меня, я думаю, что основная проблема возникает из-за того, что в css, если вы хотите изменить цвет текста/шрифта, мы используем color:some color; и вы font-color:some color; это неверно, а другое - вы используете\в своем коде, и я никогда не видел \use с css в php, надеюсь, что этого описания достаточно, чтобы вы поняли проблему.

    Если ответ решил вашу проблему, Mark/считайте это своим ответом, если ответ вам полезен, тогда проголосуйте за него как полезный.

    Вы также можете сделать это так

    Еще в рубрике

    Каков хороший способ добиться уверенности в том, что стили не изменяются в оверлейных веб-приложениях?

    Читайте также: