Класс ModelTask
Класс задач для создания и обновления файлов моделей.
- Объект
-
Оболочка -
AppShell -
BakeTask -
ModelTask
Авторские права: Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
Лицензия: MIT Лицензия
Расположение Cake/Console/Command/Task/ModelTask.php
Подробное описание методов
_generatePossibleKeysисходный код защищённый
_generatePossibleKeys( )
Находит все возможные ключи для использования в пользовательских ассоциациях.
Возвращает
arrayМассив таблиц и возможных ключей
_getModelObjectисходный код защищённый
_getModelObject( string $className , string $table null )
Получение объекта модели для имени класса.
Параметры
- строка
$className - Имя класса, для которого требуется модель.
- строка
$tableнеобязательно null - Имя таблицы
Возвращает
ModelЭкземпляр модели
_interactiveисходный код защищённый
_interactive( )
Обработка интерактивного создания
Возвращает
booleanлогическое значение
_printAssociationисходный код защищённый
_printAssociation( string $modelName , string $type , string $associations )
Вывод всех ассоциаций определенного типа.
Параметры
- строка
$modelName - Имя модели, к которой относятся отношения.
- строка
$type - Имя ассоциации, которое нужно отобразить. Например, 'belongsTo'
- строка
$associations - Коллекция ассоциаций.
bakeисходный код общедоступный
bake( string|object $name , array|boolean $data array() )
Сборка и запись файла модели.
Параметры
- строка|объект
$name - Имя модели или объект
- массив|логическое значение
$dataнеобязательно массив() - если массив и $name не является объектом, предполагается данные для выпечки, в противном случае логическое значение.
Возвращает
stringстрока
bakeFixtureисходный код общедоступный
bakeFixture( string $className , string $useTable null )
Взаимодействие с FixtureTask для автоматического создания фикстур при создании моделей.
Параметры
- строка
$className - Имя класса для создания фикстуры
- строка
$useTableнеобязательно null - Необязательное имя таблицы для использования фикстурой.
См.
FixtureTask::bake()bakeTestисходный код общедоступный
bakeTest( string $className )
Сборка и запись файла теста единиц.
Параметры
- строка
$className - Имя класса модели
Возвращает
stringстрока
confirmAssociationsисходный код общедоступный
confirmAssociations( Model $model , array $associations )
Взаимодействие с пользователем и подтверждение ассоциаций.
Параметры
-
Model$model - Временный экземпляр модели.
- массив
$associations - Массив ассоциаций для подтверждения.
Возвращает
arrayМассив подтвержденных ассоциаций
doActsAsисходный код общедоступный
doActsAs( Model $model )
Обработка поведения.
Параметры
-
Model$model - Объект модели.
Возвращает
arrayПоведения
doAssociationsисходный код общедоступный
doAssociations( Model $model )
Обработка ассоциаций.
Параметры
-
Model$model - Объект модели
Возвращает
arrayАссоциации
doMoreAssociationsисходный код общедоступный
doMoreAssociations( Model $model , array $associations )
Взаимодействие с пользователем и создание дополнительных нестандартных ассоциаций.
Параметры
-
Model$model - Временный экземпляр модели
- массив
$associations - Массив ассоциаций.
Возвращает
arrayМассив ассоциаций.
doValidationисходный код общедоступный
doValidation( Model $model )
Обработка создания и взаимодействия с пользователем для создания валидации.
Параметры
-
Model$model - Модель, для которой нужно сгенерировать валидацию.
Возвращает
arrayмассив валидации Массив выбранных пользователем валидаций.
executeисходный код общедоступный
execute( )
Метод выполнения, всегда используемый для задач.
Переопределяет
BakeTask::execute() fieldValidationисходный код общедоступный
fieldValidation( string $fieldName , array $metaData , string $primaryKey 'id' )
Обработка валидации отдельных полей.
Параметры
- строка
$fieldName - Имя поля, которое нужно валидировать.
- массив
$metaData - метаданные поля
- строка
$primaryKeyнеобязательно 'id' - Поле первичного ключа.
Возвращает
arrayМассив валидации для поля.
findBelongsToисходный код общедоступный
findBelongsTo( Model $model , array $associations )
Поиск отношений belongsTo и добавление их в список ассоциаций.
Параметры
-
Model$model - Экземпляр модели, для которой генерируется модель.
- массив
$associations - Массив текущих ассоциаций
Возвращает
arrayАссоциации с добавленными belongsTo.
findDisplayFieldисходный код общедоступный
findDisplayField( array $fields )
Взаимодействие с пользователем для определения значения displayField для модели.
Параметры
- массив
$fields - Массив полей для поиска и выбора как displayField
Возвращает
mixedИмя поля для использования в displayField или false, если пользователь отказался от выбора
findHasAndBelongsToManysource public
findHasAndBelongsToMany( Model $model , array $associations )
Находит отношения hasAndBelongsToMany и добавляет их в список ассоциаций
Параметры
-
Model$model - Экземпляр модели, который генерируется
- массив
$associations - Массив текущих ассоциаций
Возвращает
arrayАссоциации с добавленными hasAndBelongsToMany.
findHasOneAndManysource public
findHasOneAndMany( Model $model , array $associations )
Находит отношения hasOne и hasMany и добавляет их в список ассоциаций
Параметры
-
Model$model - Экземпляр модели, который генерируется
- массив
$associations - Массив текущих ассоциаций
Возвращает
arrayАссоциации с добавленными hasOne и hasMany.
findPrimaryKeysource public
findPrimaryKey( array $fields )
Находит первичный ключ в списке полей.
Параметры
- массив
$fields - Массив полей, которые могут содержать первичный ключ.
Возвращает
stringИмя поля, являющегося первичным ключом.
getAllTablessource public
getAllTables( string $useDbConfig null )
Возвращает массив всех таблиц в указанном соединении. Прекращает выполнение скрипта, если таблицы не найдены.
Параметры
- строка
$useDbConfigнеобязательно null - Имя подключения для сканирования.
Возвращает
arrayМассив таблиц в базе данных.
getNamesource public
getName( string $useDbConfig null )
Принуждает пользователя указать модель, которую он хочет создать, и возвращает выбранное имя модели.
Параметры
- строка
$useDbConfigнеобязательно null - Имя конфигурации базы данных
Возвращает
stringИмя модели
getOptionParsersource public
getOptionParser( )
Получает экземпляр парсера опций и настраивает его.
Возвращает
ConsoleOptionParserConsoleOptionParser
Переопределяет
Shell::getOptionParser() getTablesource public
getTable( string $modelName , string $useDbConfig null )
Взаимодействует с пользователем, чтобы определить имя таблицы для определенной модели.
Параметры
- строка
$modelName - Имя модели, для которой нужна таблица.
- строка
$useDbConfigнеобязательно null - Имя конфигурации базы данных для получения таблиц.
Возвращает
stringИмя таблицы
inOptionssource public
inOptions( array $options , string $prompt null , integer $default null )
Генерирует список опций и запрос.
Параметры
- массив
$options - Массив опций для выбора. Индексы должны начинаться с 0.
- строка
$promptнеобязательно null - Запрос для списка опций.
- целое число
$defaultнеобязательно null - Значение по умолчанию для данного запроса.
Возвращает
integerРезультат выбора пользователя.
listAllsource public
listAll( string $useDbConfig null )
Выводит список возможных моделей или контроллеров из базы данных
Параметры
- строка
$useDbConfigнеобязательно null - Имя конфигурации базы данных
Возвращает
arrayмассив
Методы, унаследованные от BakeTask
getPathsource public
getPath( )
Получает путь для вывода. Проверяет свойство плагина и возвращает правильный путь.
Возвращает
stringПуть вывода.
startupsource public
startup( )
Отключает кэширование и включает отладку для создания. Это заставляет использовать самую последнюю схему базы данных.
Переопределяет
Shell::startup() Методы, унаследованные от Shell
__constructsource public
__construct( ConsoleOutput $stdout null , ConsoleOutput $stderr null , ConsoleInput $stdin null )
Создаёт экземпляр этого Shell.
Параметры
-
ConsoleOutput$stdoutнеобязательно null - Объект ConsoleOutput для вывода stdout.
-
ConsoleOutput$stderrнеобязательно null - Объект ConsoleOutput для вывода stderr.
-
ConsoleInput$stdinнеобязательно null - Объект ConsoleInput для ввода stdin.
Ссылка
http://book.cakephp.org/2.0/en/console-and-shells.html#ShellПереопределяет
Object::__construct() __getsource public
__get( string $name )
Перегрузка get для ленивого создания задач
Параметры
- строка
$name - Имя свойства для доступа.
Возвращает
ShellОбъект задачи
__issetsource public
__isset( string $name )
Лени загружает модели с помощью метода loadModel(), если они объявлены в $uses
Параметры
- строка
$name - Имя модели для поиска.
_checkUnitTestsource protected
_checkUnitTest( )
Действие для создания теста Unit Test
Возвращает
booleanУспех
_controllerNamesource protected
_controllerName( string $name )
Создаёт правильное множественное имя контроллера для указанного имени класса контроллера
Параметры
- строка
$name - Имя класса контроллера
Возвращает
stringМножественное имя контроллера
_controllerPathsource protected
_controllerPath( string $name )
Создаёт правильный путь к контроллеру для указанного имени класса контроллера
Параметры
- строка
$name - Имя класса контроллера
Возвращает
stringПуть к контроллеру
_displayHelpsource protected
_displayHelp( string $command )
Отобразить справку в правильном формате
Параметры
- строка
$command - Команда, для которой требуется справка.
_getInputsource protected
_getInput( string $prompt , string|array $options , string $default )
Запрашивает у пользователя ввод и возвращает его.
Параметры
- строка
$prompt - Текст запроса.
- строка|массив
$options - Массив или строка вариантов.
- строка
$default - Значение ввода по умолчанию.
Возвращает
Eitherзначение по умолчанию или введённое пользователем значение.
_loadModelssource protected
_loadModels( )
Если $uses — массив, загрузить каждый из моделей в массиве
Возвращает
booleanbool
_modelKeysource protected
_modelKey( string $name )
Создаёт правильный подчеркнутый ключ модели для ассоциаций
Параметры
- строка
$name - Имя класса модели
Возвращает
stringЕдинственное имя ключа модели
_modelNamesource protected
_modelName( string $name )
Создаёт правильное имя модели с верблюжьей нотацией (единственное число) для указанного имени
Параметры
- строка
$name - Имя
Возвращает
stringИмя модели с верблюжьей нотацией и единственным числом
_modelNameFromKeysource protected
_modelNameFromKey( string $key )
Создаёт правильное имя модели из внешнего ключа
Параметры
- строка
$key - Внешний ключ
Возвращает
stringИмя модели
_pluginPathsource protected
_pluginPath( string $pluginName )
Найти правильный путь для плагина. Просматривает $pluginPaths для нужного плагина.
Параметры
- строка
$pluginName - Имя нужного плагина, например DebugKit
Возвращает
stringПуть к нужному плагину.
_pluralHumanNamesource protected
_pluralHumanName( string $name )
Создаёт множественное человекопонятное имя, используемое в представлениях
Параметры
- строка
$name - Имя контроллера
Возвращает
stringМножественное человекопонятное имя
_pluralNamesource protected
_pluralName( string $name )
Создаёт множественное имя для представлений
Параметры
- строка
$name - Имя для использования
Возвращает
stringМножественное имя для представлений
_singularHumanNamesource protected
_singularHumanName( string $name )
Создаёт единственное человекопонятное имя, используемое в представлениях
Параметры
- строка
$name - Имя контроллера
Возвращает
stringЕдинственное человекопонятное имя
_singularNamesource protected
_singularName( string $name )
Создаёт единственное имя для использования в представлениях.
Параметры
- строка
$name - Множественное подчеркнутое значение.
Возвращает
stringимя
_useLoggersource protected
_useLogger( boolean $enable true )
Используется для включения или выключения вывода потока логирования в stdout и stderr. Если вы не хотите видеть в stdout или stderr всё, что регистрируется через CakeLog, вызовите эту функцию с первым параметром false
Параметры
- логический
$enableопционально true - включать или нет вывод CakeLog
clearsource public
clear( )
Очистить консоль
Ссылка
http://book.cakephp.org/2.0/ru/console-and-shells.html#Shell::clearcreateFilesource public
createFile( string $path , string $contents )
Создаёт файл в заданном пути
Параметры
- строка
$path - Куда поместить файл.
- строка
$contents - Содержимое файла.
Возвращает
booleanУспех
Ссылка
http://book.cakephp.org/2.0/ru/console-and-shells.html#Shell::createFiledispatchShellsource public
dispatchShell( )
Передать команду другой оболочке. Похоже на Object::requestAction(), но предназначено для запуска оболочек из других оболочек.
Использование:
С текстовой командой:
return $this->dispatchShell('schema create DbAcl');
Избегайте использования этого формата, если у вас есть строковые аргументы с пробелами. Переданная оболочка будет вызвана неправильно. Используйте этот формат только для простого перенаправления команд.
С массивной командой:
return $this->dispatchShell('schema', 'create', 'i18n', '--dry');
Возвращает
mixedРезультат работы другой оболочки.
Ссылка
http://book.cakephp.org/2.0/ru/console-and-shells.html#Shell::dispatchShellerrsource public
err( string|array $message null , integer $newlines 1 )
Выводит одно или несколько сообщений об ошибках в stderr. Если параметры не переданы, выводит только новую строку.
Параметры
- строка|массив
$messageопционально null - Строка или массив строк для вывода
- целое число
$newlinesопционально 1 - Количество новых строк для добавления
Ссылка
http://book.cakephp.org/2.0/ru/console-and-shells.html#Shell::errerrorsource public
error( string $title , string $message null )
Отображает отформатированное сообщение об ошибке и завершает работу приложения со статусом 1
Параметры
- строка
$title - Заголовок ошибки
- строка
$messageопционально null - Дополнительное сообщение об ошибке
Ссылка
http://book.cakephp.org/2.0/ru/console-and-shells.html#Shell::errorhasMethodsource public
hasMethod( string $name )
Проверить, есть ли в этой оболочке вызываемый метод с заданным именем.
Параметры
- строка
$name - Имя проверяемого метода.
Возвращает
booleanbool
Ссылка
http://book.cakephp.org/2.0/ru/console-and-shells.html#Shell::hasMethodhasTasksource public
hasTask( string $task )
Проверить, есть ли у этого командного интерпретатора задача с указанным именем.
Параметры
- строка
$task - Имя задачи для проверки.
Возвращает
booleanУспешно
Ссылка
http://book.cakephp.org/2.0/ru/console-and-shells.html#Shell::hasTaskhrsource public
hr( integer $newlines 0 , integer $width 63 )
Выводит серию символов минус в стандартный вывод, служит визуальным разделителем.
Параметры
- целое число
$newlinesнеобязательно 0 - Количество новых строк для предварительного и последующего добавления
- целое число
$widthнеобязательно 63 - Ширина строки, по умолчанию 63
Ссылка
http://book.cakephp.org/2.0/ru/console-and-shells.html#Shell::hrinsource public
in( string $prompt , string|array $options null , string $default null )
Запрашивает у пользователя ввод и возвращает его.
Параметры
- строка
$prompt - Текст запроса.
- строка|массив
$optionsнеобязательно null - Массив или строка опций.
- строка
$defaultнеобязательно null - Значение ввода по умолчанию.
Возвращает
mixedЛибо значение по умолчанию, либо введенное пользователем значение.
Ссылка
http://book.cakephp.org/2.0/ru/console-and-shells.html#Shell::inloadModelsource public
loadModel( string $modelClass null , mixed $id null )
Загружает и создает экземпляры моделей, необходимых для этого командного интерпретатора.
Параметры
- строка
$modelClassнеобязательно null - Имя класса модели для загрузки
- смешанное
$idнеобязательно null - Исходный идентификатор, который должен иметь созданный экземпляр класса модели
Возвращает
mixedtrue, если модель найдена и экземпляр создан, возвращается ошибка, если модель не найдена.
Выбрасывает
MissingModelExceptionесли класс модели не может быть найден.
loadTaskssource public
loadTasks( )
Загружает задачи, определенные в public $tasks
Возвращает
booleanbool
nlsource public
nl( integer $multiplier 1 )
Возвращает последовательность одной или нескольких переходов на новую строку.
Параметры
- целое число
$multiplierнеобязательно 1 - Количество раз, которое последовательность перехода на новую строку должна быть повторена
Возвращает
stringстрока
Ссылка
http://book.cakephp.org/2.0/ru/console-and-shells.html#Shell::nloutsource public
out( string|array $message null , integer $newlines 1 , integer $level Shell::NORMAL )
Выводит одно или несколько сообщений в стандартный вывод. Если параметры не переданы, выводит только символ перехода на новую строку.
Уровни вывода
Существует 3 встроенных уровня вывода. Shell::QUIET, Shell::NORMAL, Shell::VERBOSE. Уровни вывода verbose и quiet соответствуют переключателям вывода verbose и quiet в большинстве командных интерпретаторов. Использование Shell::QUIET для сообщения означает, что оно всегда будет отображаться. В то время как использование Shell::VERBOSE означает, что оно будет отображаться только при включенном verbose выводе.
Параметры
- строка|массив
$messageнеобязательно null - Строка или массив строк для вывода
- целое число
$newlinesнеобязательно 1 - Количество новых строк для добавления
- целое число
$levelнеобязательноShell::NORMAL - Уровень вывода сообщения, см. выше.
Возвращает
integer|booleanВозвращает количество байтов, возвращенных при записи в стандартный вывод.
Ссылка
http://book.cakephp.org/2.0/ru/console-and-shells.html#Shell::outoverwritesource public
overwrite( array|string $message , integer $newlines 1 , integer $size null )
Перезаписать уже выведенный текст.
Полезно для построения полосок прогресса или когда необходимо заменить текст, уже выведенный на экран, новым текстом.
Предупреждение Невозможно перезаписать текст, содержащий переходы на новые строки.
Параметры
- массив|строка
$message - Сообщение для вывода.
- целое число
$newlinesнеобязательно 1 - Количество новых строк для добавления.
- целое число
$sizeнеобязательно null - Количество байтов для перезаписи. По умолчанию равно длине последнего выведенного сообщения.
Возвращает
integer|booleanВозвращает количество байтов, возвращенных при записи в стандартный вывод.
paramsource public
param( string $name )
Безопасно получить значения из $this->params.
Параметры
- строка
$name - Имя параметра для получения.
Возвращает
string|boolean|nullЗначение. Вернет null, если параметр не существует.
runCommandsource public
runCommand( string $command , array $argv )
Выполняет командный интерпретатор с предоставленным argv.
Делегирует вызовы задачам и разрешает методы внутри класса. Команды ищутся в следующем порядке:
- Метод в командном интерпретаторе.
- Имя соответствующей задачи.
-
main()метод.
Если командный интерпретатор реализует метод main(), все недостающие вызовы методов будут отправлены в main() с оригинальным именем метода в argv.
Параметры
- строка
$command - Имя команды для выполнения в этом командном интерпретаторе. Если этот аргумент пустой, и командный интерпретатор имеет метод
main(), этот метод будет вызван вместо него. - массив
$argv - Массив аргументов для выполнения командного интерпретатора. В этом массиве должно отсутствовать имя командного интерпретатора.
Ссылка
http://book.cakephp.org/2.0/ru/console-and-shells.html#Shell::runCommandshortPathsource public
shortPath( string $file )
Делает абсолютный путь к файлу более читаемым.
Параметры
- строка
$file - Абсолютный путь к файлу
Возвращает
stringкороткое имя пути
Ссылка
http://book.cakephp.org/2.0/ru/console-and-shells.html#Shell::shortPathwrapTextsource public
wrapText( string $text , string|integer|array $options array() )
Обернуть блок текста. Позволяет задавать ширину и отступы блока текста.
Опции
-
widthШирина, до которой следует обрезать. По умолчанию 72 -
wordWrapОбрезать только по разрывам слов (пробелам). По умолчанию true. -
indentОтступать текст с помощью указанной строки. По умолчанию null.
Параметры
- строка
$text - Текст, который нужно отформатировать.
- строка|целое число|массив
$optionsнеобязательно массив() - Массив опций для использования или целое число, до которого нужно обрезать текст.
Возвращает
stringОтформатированный/отступленный текст
См. также
CakeText::wrap()Ссылка
http://book.cakephp.org/2.0/ru/console-and-shells.html#Shell::wrapTextМетоды, унаследованные от Объект
_mergeVarssource protected
_mergeVars( array $properties , string $class , boolean $normalize true )
Объединяет свойства этого объекта $property со свойствами в определении $class. Значение свойства этого класса для свойства будет объединено поверх $class'.
Это предоставляет часть DRY-магии CakePHP. Если вы хотите отключить эту функцию, переопределите этот метод как пустую функцию.
Параметры
- массив
$properties - Имя свойств для объединения.
- строка
$class - Класс для объединения свойства с ним.
- булево
$normalizeнеобязательно true - Установите в значение true, чтобы выполнить свойства через Hash::normalize() перед объединением.
_setsource protected
_set( array $properties array() )
Позволяет задать несколько свойств объекта в одной строке кода. Будут установлены только свойства, которые являются частью объявления класса.
Параметры
- массив
$propertiesнеобязательно array() - Ассоциативный массив, содержащий свойства и соответствующие значения.
_stopsource protected
_stop( integer|string $status 0 )
Останавливает выполнение текущего скрипта. Оборачивает exit(), что упрощает тестирование.
Параметры
- целое число или строка
$statusнеобязательно 0 - см. http://php.net/exit для значений
dispatchMethodsource public
dispatchMethod( string $method , array $params array() )
Вызывает метод этого объекта с заданными параметрами. Предоставляет ОО-обертку для call_user_func_array
Параметры
- строка
$method - Имя метода для вызова
- массив
$paramsнеобязательно array() - Список параметров для использования при вызове $method
Возвращает
mixedРезультат вызова метода
logsource public
log( string $msg , integer $type LOG_ERR , null|string|array $scope null )
Удобный метод для записи сообщения в CakeLog. Для получения дополнительной информации о записи в журналы, см. CakeLog::write().
Параметры
- строка
$msg - Сообщение журнала
- целое число
$typeнеобязательно LOG_ERR - Константа типа ошибки. Определена в app/Config/core.php.
- null|строка|массив
$scopeнеобязательно null - Сфера(ы), в которой создается сообщение журнала. Для получения дополнительной информации о сферах ведения журнала, см. CakeLog::config().
Возвращает
booleanУспех записи в журнал
requestActionsource public
requestAction( string|array $url , array $extra array() )
Вызывает метод контроллера из любого места. Может использоваться для соединения контроллеров или связи плагинов с основным приложением. requestAction может использоваться для возвращения отображаемых представлений или извлечения возвращаемого значения из действий контроллера.
Под капотом этот метод использует Router::reverse() для преобразования параметра $url в строковый URL. Вы должны использовать форматы URL, совместимые с Router::reverse().
Передача данных POST и GET
Данные POST и GET могут быть смоделированы в requestAction. Используйте $extra['url'] для данных GET. Параметр $extra['data'] позволяет моделировать данные POST.
Параметры
- строка или массив
$url - URL в виде строки или массива. В отличие от других массивов URL в CakePHP, этот URL не будет автоматически обрабатывать переданные и именованные аргументы в параметре $url.
- массив
$extraнеобязательно array() - Если массив содержит ключ "return", он устанавливает AutoRender в значение true. Также может быть использован для отправки данных GET/POST, а также именованных и переданных аргументов.
Возвращает
mixedБулево значение true или false при успехе/неудачи или содержимое отображаемого действия, если в $extra установлен ключ 'return'
toStringsource public
toString( )
Преобразование объекта в строку. Каждый класс может переопределять этот метод по необходимости.
Возвращает
stringИмя этого класса
Константы, унаследованные от Shell
CODE_ERROR, NORMAL, QUIET, VERBOSE |
Резюме свойств
Свойства, унаследованные от BakeTask
Свойства, унаследованные от Shell
$OptionParsersource
public ConsoleOptionParser
Экземпляр ConsoleOptionParser, настроенный для этого класса.
$_lastWrittensource
protected целое число
Количество байтов, последне записанных в поток вывода, используемое при перезаписи предыдущего сообщения.
$modelClasssource
public строка
Основное имя класса модели этого шелла, первая модель в свойстве $uses.
null $paramssource
public массив
Содержит переключатели команд, обработанные из командной строки.
array() $usessource
public массив
Содержит модели для загрузки и инициализации.
Ссылка
http://book.cakephp.org/2.0/ru/console-and-shells.html#Shell::$usesarray()
© 2005–2016 The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
http://api.cakephp.org/2.7/class-ModelTask.html