1. Устанавливаете Yii2 Basic на сервер, как написано в документации. Описано там всё четко и по делу, добавить мне нечего.
Разве что вот: локально на OpenServer поставилось без сучка, без задоринки. А вот удаленно, на KVM Ubuntu 16.04 с 1Gb оперативки Composer-у не хватило памяти. Бился часа два, так и не осилил. Благо, что с локального сервера на удаленный, сайт можно легко перенести простым копированием.
2. Повторюсь, установка — basic (допустим, в папку /www/site/basic, но далее мы для простоты изложения будем вести отсчет именно от папки basic в которую вы создали проект, как рекомендуется в руководстве).
Папку basic/web сразу устанавливаете как DocumentRoot — как это сделать, тоже есть в официальном руководстве на русском языке.
3. Открываете basic/controllers/SiteController.php и меняете
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
],
];
}
на
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
],
'page' => [
'class' => 'yii\web\ViewAction',
],
];
}
Это позволит вам не писать отдельный action для каждой статической страницы. Отныне они у вас вас будут подхватываться автоматически из папки basic/views/site/pages.
Создайте в этой папке файл one.php и скопируйте в него содержимое файла basic/views/site/about.php (для понятности).
Теперь содержимое этого файла доступно по адресу:
http://yoursite.com/index.php?r=site%2Fpage&view=one
Соответственно, таких файлов вы можете создать сколько вам нужно.
4. Включаете ЧПУ, как написано здесь.
Настройки производятся в файле basic/config/web.php.
5. Для того, чтобы урл
http://yoursite.com/index.php?r=site%2Fpage&view=one
выглядел как
http://yoursite.com/one
нужно задать такое правило для ЧПУ
'view' => 'site/page',
(Внимание!!! Слово view в вышеприведенном примере следует взять в угловые скобки, не смог написать как есть, ибо хабра-HTML-фильтры не пропускают, зато ниже — все нормально, парадокс… *пожимаю плечами*)
То есть кусок кода, отвечающий за ЧПУ в basic/config/web.php будет выглядеть так:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'enableStrictParsing' => false,
'rules' => [
'<view>' => 'site/page',
],
],
6. Теперь метатеги для каждой страницы. Изначально там установлен только title
$this->title = 'Титл для one.php';
А нам, допустим, нужно добавить OG-метатеги (если не в курсе что это — непременно прогуглите — для соцсетей вещь незаменимая). Пишете прямо строчкой ниже что-то вроде:
$this->registerMetaTag([ 'property' => 'og:title', 'content' => 'OG-титл для one.php' ]);
Остальные мета-теги добавляете по аналогии с этим. Если что-то непонятно — есть документация по registerMetaTag()
7. Трик для og:url
Под строчкой
use yii\helpers\Html;
в самом верху страницы, добавляете:
use yii\helpers\Url;
А сам og:url прописываете так:
$this->registerMetaTag([ 'property' => 'og:url', 'content' => Url::to('',true) ]);
Теперь при любых переносах с сервера на сервер ог-урл у вас будет в порядке.
8. То же самое и с внутренними ссылками по сайту. Подключаете хелпер (наверху страницы):
use yii\helpers\Url;
И, например, ссылку на нашу страницу-one размещаете в таком виде:
<?= Url::to(['site/page', 'view' => 'one']); ?>
Она теперь будет отображаться правильно вне зависимости от того, какие именно правила вы установите для ЧПУ.
И да, обратите внимание, что в виджете NavBar лэйаута (basic/views/layouts/main.php) эта же ссылка будет выглядеть примерно так:
['label' => 'Наша страница One', 'url' => ['/site/page', 'view' => 'one']],
Вот вроде и всё. Простой сайт на Yii2 вполне готов к работе (жалко что смайлы запрещают ставить).
Так или иначе, документацию к Yii2 читать вам все равно придется, по крайней мере, вводную часть. Но зато теперь вы знаете как сразу создать готовое к работе веб-приложение, а не просто заготовку. Если бы у меня такое руководство было сразу — я бы тогда не сидел три дня в сети, а побольше гулял бы. Весна же.
Будьте здоровы!
Комментарии (59)
vaniaPooh
07.03.2017 16:09+2Вопрос — зачем делать статический сайт на Yii? Почему не взять и нагенерировать его с markdown при помощи какого-нибудь готового инструмента?
procode
07.03.2017 17:28-1Именно это я и вырезал из предисловия )))))))) видимо зря )))
если двумя словами: мне нужно было пару своих лендингов развернуть в нечто моногостраничное + чтобы была перспектива на расширяемость + хотелось попробовать что-то новое (весна ведь))))
а так, конечно, поставил WP или D7 и в путь -)FireWind
07.03.2017 17:34-2Спасибо большое, как раз такая штука и нужна для одностраничников/лендингов. Собирался городить свой огород на подключаемых файлах .php, но сейчас воспользуюсь вашим решением. Кстати, зачем установку делать с composer, не проще развернуть архив и избежать проблем с памятью (хостинги разные бывают)?
procode
07.03.2017 17:56-2Спасибо большое, как раз такая штука и нужна для одностраничников/лендингов. Собирался городить свой огород на подключаемых файлах .php, но сейчас воспользуюсь вашим решением.
«Спасибом» — не отделаетесь! :D Объясните товарищам в каментах ниже и выше — зачем я «этот огород городил» )))
Шучу конечно! :) Кому надо — поймет, а остальные нам не интересны, правда же? )
Да, можно было и архивом, но мне захотелось попробовать и через Composer :)
К тому же, в конечном итоге, все равно пришлось лить на удаленный хост в виде архива.
ellrion
07.03.2017 17:22+7Объясните смысл этой статьи? Она решает какую то конкретную проблему? Она что то раскрывает более глубоко?
Люди для которых нужны вот такие cтроки:
Под строчкой
use yii\helpers\Html;
в самом верху страницы, добавляете:
use yii\helpers\Url;
должны идти учить сам язык а потом уже идти знакомиться с фреймворком.
procode
07.03.2017 17:36-2Она решает какую то конкретную проблему?
Давайте еще раз прочитаем что написано в заголовке статьи:
Yii2, быстрый старт. Самый простой сайт на Yii2 со статическими страницами без использования БД
Какое именно слово непонятно в этих двух предложениях?ellrion
07.03.2017 17:42+3Т.е. вы считаете что это реальное решение реального юзкейса?
Или этот быстрый старт для кого? Для codemonkey? На хабре?procode
07.03.2017 18:04Прошу ознакомиться: https://habrahabr.ru/post/323416/#comment_10107528
А вообще, я рассуждал просто:
— Коли такой креатив был нужен неделю назад мне — значит есть и еще такие же
Как видите, я не ошибся.
Вы же поймите, помимо интеллектуальных снобов, обсуждающих нюансы dependency injection в Symfony, есть еще и простые парни вроде меня, которым иной раз нужно тупо сверстать за вечер небольшой сайтик для каких-то собственных нужд, причем не просто, а с перспективой на расширение функционала.
Вот это оно и есть.BoShurik
07.03.2017 19:44+1Вот ради любопытства попробовал тоже самое сделать на Symfony. И мне что-то кажется, что там проще :)
https://github.com/BoShurik/symfony-simple/commit/43067c7d78618aa8a85af2214b1bad272354d2d4
kaboose
07.03.2017 17:29Правильнее будет на SSI собрать, на худой конец через include php. А это зачем? Это даже не мануал, это называется — дайте инвайт на хабр.
А так правильно, лучше гулять, чем писать такой мануал.
Спасибо.procode
07.03.2017 17:34-5Уж поверьте на слово, получить инвайт на Хабр для меня не проблема :D я web изнутри ковыряю с конца 90-х — у меня таких историй — вагон и маленькая тележка ))
И да, имеется и самописный MVC для как раз для таких вот целей, но чисто прикололо сделать сайт на новом для меня Yii2 — вообще не вижу проблемы.
//вы реально считаете, что сейчас кто-то еще использует SSI? :)Fesor
08.03.2017 03:30+2Уж поверьте на слово,
Неслово верить вредно.
И да, имеется и самописный MVC
Это когда у нас HTML вынесен в шаблоны а SQL размазан по чем-то что вы называете "модель"? Ну да, я тоже таким занимался когда php осваивал и мне кто-то сказал что mvc это круто и модно. Но вы ж там с конца 90-х. Могли бы уже похвастаться чем-то интереснее типа "у меня свой request/response фреймворк", или "у меня свой генератор статических вэбсайтов".
dom1n1k
08.03.2017 14:41SSI это очень хорошо задуманная, но очень фигово реализованная технология. Практиковал ее когда-то давно. Возможности скудные и очень неудобно все.
MetaDone
07.03.2017 18:12+1Жду статью как сделать автозагрузку psr-4 через composer
Будет примерно так же полезно
А если серьезно — то микрофреймворки или генераторы для такой мелочи куда больше подходят, рекомендовать ради одного правила в url тащить довольно жирный фреймворк — плохой подходprocode
07.03.2017 19:44-5Это индивидуально.
Вот моя мотивация:
— Я могу сейчас к этим статическим страницам легко прикрутить контактную форму из Yii2. Например. Или колонку новостей.
Причем, мне для этого не понадобится менять движок и все будет сделано в рамках единой концепции.ellrion
07.03.2017 20:37+3Да пожалуйста. Но вы похоже так и не уловили сути притензии. Статья 'я поставил фреймворк' не уровень хабра.
procode
07.03.2017 21:16-5А почему вы считаете, что можете выдвигать мне какие-то претензии?
Вы мне за написание этой статьи денег вроде не перечисляли.
Кому она нужна — те ей воспользуются.
Вам она, я вижу, не нужна.
Ну ок, не вопрос — я тоже не всё подряд читаю.
зы. и да, ваша «притензия» — в миру, вовсе не притензия, а претензия.
Fesor
08.03.2017 03:27+1Причем, мне для этого не понадобится менять движок и все будет сделано в рамках единой концепции.
концепция заключается в "прочитал документацию за пол часика и можно в прод"? Суть в том что ваша публикация не несет полезной нагрузки.
procode
08.03.2017 10:21-2Суммарно треду:
1. Откровенно удивило количество неадекватов на Хабре. Вроде бы древний IT-ресурс с репутацией, а вот поди ж ты…
Суть претензии в том, что есть золотое правило:
— Можешь сделать лучше — сделай. Не можешь — отойди и не мешай делать другим.
И когда я вижу как это правило грубо нарушается — меня это откровенно расстраивает. Ну да, я ведь живой человек.
2. Жалею что поддержал «светскую беседу» с этими людьми. Ну, это просто по неопытности (2 день на Хабре). Впредь буду осмотрительней.
3. Лучший комментарий треда:
Спасибо большое, как раз такая штука и нужна для одностраничников/лендингов. Собирался городить свой огород на подключаемых файлах .php, но сейчас воспользуюсь вашим решением.
Именно для таких случаев и был написан креатив. Для прагматиков, которым требуется решать реальные практические задачи. Будущее за такими людьми, а не интеллектуальными снобами.
Вот еще хороший камент, кстати:
Вот ради любопытства попробовал тоже самое сделать на Symfony. И мне что-то кажется, что там проще :)
https://github.com/BoShurik/symfony-simple/commit/43067c7d78618aa8a85af2214b1bad272354d2d4
Это как раз тот случай когда человек попытался сделать лучше. Уважаю такой подход.
***
В общем, это я позлился что мне карму заминусили.
sspat
08.03.2017 12:06+1Самый явный признак того, что вы подошли к задаче с неверного направления — это то, что вы потратили на ее решене три дня. И поверьте мне, те, кто не сможет выполнить те действия которые вы описали самостоятельно, точно так же на три дня застрянет как только нужно будет внести любое изменение — вы же нигде не обьяснили, почему нужно делать именно так? За что отвечают настройки в конфиге? Вы предлагаете просто перепечатать с экрана какой-то код, а при любом вопросе идти читать документацию.
procode
08.03.2017 13:38-21. Документация к Yii2 весьма добротно написана, смысл переиначивать то, что и так хорошо.
2. В тексте сделан акцент на вещах, которые не очевидны человеку, начинающему знакомиться с Yii2.
3. Да, доки по методам Yii2 человеку всё равно придется читать — а как иначе-то? Но теперь он знает какие именно методы каких классов ему нужно понять для решения описанной в заголовке задачи.
4. Повторюсь: мне очень странно что приходится объяснять в комментариях очевидные вещи. Мне казалось что пользователи Хабра должны быть более сообразительны. Ну, как бы, ноблесс облиге :)Fesor
09.03.2017 01:59+1не очевидны человеку, начинающему знакомиться с Yii2.
типа "что такое неймспейсы"? Причем вы даже не объяснили зачем нужно вставлять use. Просто "поверьте наслово", делайте мол так.
мне очень странно что приходится объяснять в комментариях очевидные вещи.
типа "зачем вы сделали очередной велосипед" или "какую практическую пользу и на какую аудиторию ориентирован материал"? Это вполне себе очевидные вопросы, но ответов вы недали и "многим" все еще непонятно зачем людям которые и php толком не знают вообще брать yii2 для решения задачи вывода статических страничек. Лучше научить их пользоваться генератором.
procode
09.03.2017 18:59-3но ответов вы недали и «многим» все еще непонятно зачем людям которые и php толком не знают вообще брать yii2 для решения задачи вывода статических страничек
Ну а я здесь причем? Мне-то всё понятно. Почему я должен разжевывать это понимание праздноинтересующимся?
Я вообще пожалел уже, что начал отвечать на эти тупые вопросы в каментах — всю карму мне заминусили :D
Я реально не ожидал, что здесь столько троллей. Вроде не Лурк и не Удаффком…
Просто по человечески поймите: какой смысл вести с вами диалог, коли вы априори встаете в позу всезнающего и вечноправого? В реальной-то жизни я с такими людьми вообще не общаюсь. Решил вот сделать исключение для вирта, и, как выяснилось, зря.MetaDone
09.03.2017 19:43+2Ну а я здесь причем? Мне-то всё понятно.
с таким подходом лучше в личный бложек публиковать, а не на крупный ресурсprocode
10.03.2017 08:55-1Ненене. Одно дело когда юзер спрашивает о деталях реализации описанного в сабже — это норм. Конечно я с удовольствием поделюсь опытом. И совсем другое дело когда какие-то мутные личности начинают раскачивать за тему того, что «это им не нужно». Ну не нужно так не нужно — просто пройди мимо и всё. Мне тут например на Хабре 99% постов не нужны. Ну так я их и не читаю и не коменчу. Логично же?
Всё просто как мычание. Зачем усложнять-то?MetaDone
10.03.2017 09:16+2Одно дело когда юзер спрашивает о деталях реализации описанного в сабже — это норм
это норма, когда реализуемая вещь несколько сложнее того о чем можно прочитать в документации. Как выше уже сказали, статья ниже местного уровня. Вот если бы вы добавили админку для этих страниц, связали все это дело с varnish, да добавили обработку esi-блоков, например для форм, то было бы поинтереснее и полезнее.procode
10.03.2017 10:17Вы оцениваете со своего уровня знания Yii2. А этот текст ориентирован на полного новичка, которому нужно быстро слепить сайт на Yii2. И ему этот текст полезнее чем описанные вами навороты. Просто другая аудитория, только и всего. Что в этом такого непонятного?
MetaDone
10.03.2017 10:27+2А этот текст ориентирован на полного новичка, которому нужно быстро слепить сайт на Yii2
И ему этот текст полезнее чем описанные вами навороты
и как вы предлагаете эти самые страницы редактировать?
В статье написано
Отныне они у вас вас будут подхватываться автоматически из папки basic/views/site/pages
круто, все равно придется верстать и складывать их в папку. Зачем тут фреймворк, если можно эти же сверстанные страницы положить в папку? Без «наворотов» это совсем бесполезно, даже вредно.
Fesor
10.03.2017 11:02+2Что в этом такого непонятного?
Вы предлагаете брать yii2 для того что бы использовать его как шаблонизатор… в то время когда можно просто взять twig (или любой другой шаблонизатор, просто twig гибче с точки зрения реюза шаблонов), composer и plain php и получить абсолютно тот же результат но намного больше возможностей. И опыта получить можно будет больше при объеме статьи не более вашей.
Новичкам не стоит читать статьи в духе "скопируйте эту строчку", ибо так они ничему не научатся. А готовых решений и так достаточно и ставить их удобнее чем копировать из статьи на хабре.
Потому и вызывает непонимание зачем вы вообще писали эту статью. Новичкам пользы нет, ибо мы говорим об уровне знаний "я вчера услышал про PHP". Им лучше 3 дня почитать документацию и разобраться (причем документацию по PHP для начала). Потому мое личное мнение — ваша статья наносит больше вреда чем пользы с точки зрения обучения людей.
Ну а если разработчик не может сделать то что вы описали за день хотя бы, то подпускать таких к коммерческим проектам не стоит, а значит 3 дня на поразбираться у них есть.
procode
10.03.2017 23:50Потому и вызывает непонимание зачем вы вообще писали эту статью.
Тут я бессилен.
Можно привести осла к водопою, но невозможно заставить его пить воду.
С пониманием то же самое.
Если человек не хочет понимать — заставить я его не смогу.MetaDone
11.03.2017 01:21+3есть простое объяснение почему все адекватные люди считают вашу статью унылой. можете прочитать по ссылке. Вкратце — установили фреймворк, а гонора будто скайнет написали
procode
11.03.2017 10:57-3А кто вам сказал что вы и ваши камрады — «адекватные люди»?
Я пока что увидел в каментах всего несколько адекватов, и это я не про вас.
У меня встречный вопрос: вы своими комментариями чего здесь добиться пытаетесь? Цель какова?
То есть вы пишете какой-то галимый офтоп к вполне себе предметной статье на конкретную тему.
У вас какой-то вопрос есть по тексту? Что-то не работает из описанного в статье?
kaboose
10.03.2017 23:36Серия «Как забить гвоздь на даче?»
Вариант 1
1) Найти строительную организацию с допуском СРО.
2) Предоставить проект с утверждением главного архитектора города.
3) Составить детальную смету по работам и материалам.
4) Получить удовлетворение от проделанных работ.
Вариант 2
1) Взять молоток, забить гвоздь.
2) Получить удовлетворение от проделанных работ.
barby
Не могу себе этого представить. Вы явно что-то там делаете не так.
BoShurik
Похоже, что автор делал
composer update
вместоcomposer install
procode
Нет, я все делал по официальной инструкции.
BoShurik
А в официальной инструкции есть пункт про деплой? Я что-то не нашел.
Какая версия php? На седьмой версии использование памяти сильно меньше, должно сработать
procode
7.1
я потом попробую еще сделать swap, как посоветовали ниже, отпишусь)
procode
Ничего сверх того, что написано в руководстве. Yii2 начинал устанавливаться и где-то по ходу установки вылетал с allocated memory и т.п. memory limit в PHP установлен в -1 (безлимитно). Повоторюсь, локально (Win7 6Gb) все нормально.
V0V
Может лишнего набросал в composer.json.
Из коробки действительно должно хватать з головой 1Gb оперативки.
И вместо того «простого копирования» добавили бы swap еще 1Gb и развернули нормально.
procode
На сайте Композера есть такое:
мб это оно и есть…
Fesor
не надо просто
composer install
на серваке делать. Сделать локально билд с дампнутым автолоадером и его уже деплоить.procode
… и да, насчет swap прогуглю (я не такой уж большой спец в настройке LAMP — совершенствуюсь по мере необходимости)))
mr_avi
xdebug может композер заставить кушать память, известная тема
BoShurik
С версии 1.3 он вроде как отключает xdebug автоматически
https://github.com/composer/composer/releases/tag/1.3.0