LINUX.ORG.RU

Пыхотред

 


4

7

А чего это у нас, в нашем загончике, нет закрепленного пыхотреда?

Вот теперь есть(надеюсь, его закрепят).

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

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

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

<?php

★★★
Ответ на: комментарий от aiive

принципиально невозможно забыть заэскейпить переменную

Возможно. Написав {{ $var|raw }}. Например потому что эскейпинг требует времени и некто может везде писать этот |raw. Ты можешь сказать, что этот некто - дебил. Тогда я отвечу, что человек который забывает эскейпить в php тоже дебил. Очень странно разрабатывать инструмент в расчёте на дебилов (ну разве что для военного применения).

не написав свой псевдошаблонизатор ты эффективно так наследоватся не сможешь

Я тебя уже ткнул носом в WP где никакого «своего псевдошаблонизатора» нет, а ты всё равно продолжаешь отрицать реальность.

прямого ответа на этот вопрос я так и не увидел

Всё ты увидел.

я довольно долго пользовался твигом

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

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Возможно. Написав {{ $var|raw }}.

Забыть заэскейпить - невозможно. Ключевое слово - забыть. {{ var|raw }} нужно делать целенаправленно.

Я тебя уже ткнул носом в WP где никакого «своего псевдошаблонизатора» нет.

Я уже ответил, что у меня нет никакого желания ковырятся в wp нет. Я в вопросе привел короткий пример кода, в ответ ожидалось подобное. Дай пример кода или линк на доку с этим примером - тогда это будет нормальным прямым ответом.

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

И опять ты вангуешь неверно.

aiive
()
Ответ на: комментарий от no-such-file

Я тебя уже ткнул носом в WP где никакого «своего псевдошаблонизатора» нет

Все что я бегло нашел в доках wp это следущее.

<?php get_header(); ?>
<?php get_template_part('nav'); ?>
<h2>Error 404 - Not Found</h2>
<?php get_sidebar(); ?>
<?php get_footer(); ?>


Тут нет псевдошаблонизатора, но и нет того типа наследования, которое было у меня в вопросе.
aiive
()
Ответ на: комментарий от aiive

Дай пример кода

<?php ob_start(); ?>
    Content of the page...
<?php $content = ob_get_clean(); ?>

<?php require 'layout.php' ?>

После твига наверное магия.

Ключевое слово - забыть

Давай так, ты сам лично когда-нибудь забывал? Я видел примеры когда на это забивали (или не знали), но чтобы забывали - никогда.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 2)
Ответ на: комментарий от no-such-file

Давай так, ты сам лично когда-нибудь забывал?

Да, когда только начинал такое было.

Я видел примеры когда на это забивали (или не знали), но чтобы забывали - никогда.

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

После твига наверное магия.

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

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

Если что, я не топлю за то что твиг весь такой идеал и нативный пхп говно. И в твиге хватает вещей, которые мне не нравятся. Но при этом в нем есть и вещи, которые в нативном пхп делаются довольно неудобно.

aiive
()
Ответ на: комментарий от aiive

В твоем примере будет одно из двух, в зависимости от того, что там в layout.php

Да ты просто лалка. Любой школоло прочитавший книжку «php за 24 часа» допетрит, что нужно сделать чтобы реализовать то, что ты хочешь за 5 минут. Например иметь отдельно defaults.php с дефолтным значением $contents и подключать его require_once, а в шаблоне писать $contents .= 'add' и т.п. Причем это всё будет уже в разы функциональнее твига, потому что $contents можно крутить как угодно средствами php, а не урезанным микроязыком шаблонизатора.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от aiive

Если что, я не топлю за то что твиг весь такой идеал и нативный пхп говно. И в твиге хватает вещей, которые мне не нравятся. Но при этом в нем есть и вещи, которые в нативном пхп делаются довольно неудобно

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

Эта тема с твигом и т.п. пришла из-за подражания джангам и рельсам, но там-то просто нет альтернативы, а зачем это тащить в пых который и так сам-себе шаблонизатор?

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Да ты просто лалка. Любой школоло прочитавший книжку «php за 24 часа» допетрит, что нужно сделать чтобы реализовать то, что ты хочешь за 5 минут.

Молодец, и все это станет выглядеть еще более хреново, чем было до этого. Зато не используем шаблонизатор, да.

Причем это всё будет уже в разы функциональнее твига, потому что $contents можно крутить как угодно средствами php, а не урезаным микроязыком шаблонизатора.

Про возможность расширения твига ты явно не слышал.

Я вообще нафиг с тобой спорить, твоя неадекватность понятна. Можешь не отвечать.

aiive
()
Ответ на: комментарий от no-such-file

Я не сторонник твиг, то чем я пользуюсь - это как раз чистый php + обёртка над ob_*. Но не могу не отметить что приведённого aiive кода данное решение с ob_start выглядит откровенно плохо, если честно.

По поводу эскейпинга - автоматическое решение конечно выглядит лучше. Зачем писать <?= e($var) ?> если его можно не писать?
Забывать вроде и не забудешь, но вот новички постоянно делают двойной эскейпинг.

AndreyKl ★★★★★
()
Ответ на: комментарий от aiive

Про возможность расширения твига ты явно не слышал.

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

Молодец, и все это станет выглядеть еще более хреново, чем было до этого

И чем конкретно это хреново? Ну кроме того что тебя макнули в собственное невежество?

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Эта тема с твигом и т.п. пришла из-за подражания джангам и рельсам

Ну в рельсах изначально был erb, тот же самый пых. И сейчас haml/slim это тот же руби с хитрым синтаксом. Это в питошке вечно страдают, превозмогая отступы.

anonymous
()
Ответ на: комментарий от AndreyKl

данное решение с ob_start выглядит откровенно плохо, если честно

Данное решение является proof of concept а не продакшен кодом, если кто-то не догадался. Поэтому обсуждать его красивость не совсем уместно.

Зачем писать <?= e($var) ?> если его можно не писать?

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

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Данное решение является proof of concept а не продакшен кодом, если кто-то не догадался. Поэтому обсуждать его красивость не совсем уместно.

Но ведь немного странно сравнивать proof of concept с продакшн кодом: пока ты накодишь продакшн, оглянуться не успеешь, твиг и получится, или что похуже.

Скажу прямо, мне не нравится идея встраивать движок шаблонов в php в том смысле что подменять условные операторы, вызовы функций (из подобного я знаком лишь со смарти). Но сам по себе php всё таки недостаточен для шаблонов, нужна какая-то организация этого всего: встройка шаблонов, подшаблонов, способы передачи параметров, пути поиска в конце концов.

Их решение (твиг) выглядит целостным и готовым, а твоё «а это можно сделать так, если потратить кучу времени». Ну можно, да. Но будет ли лучше? Смысл есть кмк только в сравнении готовых решений. В этом смысле чистый php на мой взгляд проигрывает твигу как шаблонизатор в том аспекте который приведён в треде уж точно.

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

AndreyKl ★★★★★
()
Последнее исправление: AndreyKl (всего исправлений: 1)
Ответ на: комментарий от AndreyKl

Но сам по себе php всё таки недостаточен для шаблонов, нужна какая-то организация

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

anonymous
()
Ответ на: комментарий от anonymous

Для этого и придумали фреймворки.

Вопросов нет, для этого. Но у no-such-file приведён код, а не показано как это сделать на том или ином фреймворке. Я б может быть не полез спорить если бы речь шла о лучшем решении, но речь идёт о наброске vs решение.

AndreyKl ★★★★★
()
Ответ на: комментарий от AndreyKl

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

anonymous
()
Ответ на: комментарий от AndreyKl

пока ты накодишь продакшн, оглянуться не успеешь, твиг и получится, или что похуже

А зачем мне его кодить? Что мало движков использующих пых как шаблонизатор? Тот же Yii, CakePHP, да даже wordpress с которого началась тема и который я предлагал посмотреть aiive, но он отказался.

нужна какая-то организация этого всего

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

а это можно сделать так, если потратить кучу времени

Это ты уже сам себе нафантазировал. Я такого нигде не утверждал.

no-such-file ★★★★★
()
Ответ на: комментарий от AndreyKl

Но у no-such-file приведён код, а не показано как это сделать на том или ином фреймворке

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

Только не надо разводить демагогию про то, что это «не чистый» пых.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

Выглядит примерно так:

aiive

можно делать вот так и вот так, вот [реальный код]...

no-such-file

да это говно, можно гораааздо круче, поглядите [посылает не по ссылке на код], а ещё я могу вот так [приводит микрокусок псевдо-кода]

Конструктивненко, уважаю. Главное, не перетрудился.

AndreyKl ★★★★★
()
Ответ на: комментарий от AndreyKl

Конструктивненко, уважаю. Главное, не перетрудился

А теперь приведи ссылки на сообщения где были слова

да это говно

можно гораааздо круче

а ещё я могу вот так

?

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

И да, приведённый мной код делает ровно то, что просил aiive.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

И да, приведённый мной код делает ровно то, что просил aiive.

Да, я не разобрался, если не придираться к синтаксису, разницы нет вообще. Я не прав в данном вопросе.

AndreyKl ★★★★★
()
Последнее исправление: AndreyKl (всего исправлений: 1)
Ответ на: комментарий от aiive

нет того типа наследования, которое было у меня в вопросе

Там есть гораздо более гибкий механизм, потому что внутри этих get_header() вызываются разные do_action('get_header') на которые можно навешивать коллбэки с приоритетами вызова.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)