Минимум: CMS

3.97K
.
Delphinum
Добавлено: 01.04.2017 / 12:56
AlkatraZ, за основу я брал идеи заложенные Jekyll, а именно простота и универсальность через настройки (глобальные настройки можно переопределять для каждого каталога или даже конкретного файла).

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

<?php
include('sp.php');

// Контроллер страницы
$db = $sp['database'];
$rows = $db->query(...);
?>
<!-- Шаблон -->
<ul>
  <?php foreach($rows as $row); ?>
    <li><?= $row['val'] ?></li>
  <?php endforeach; ?>
</ul>


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

В остальном да, нужно знать меру )

Добавлено: 17.04.2017 / 12:36
Народ, я в некотором замешательстве. Предложенный мной в этой теме код за последнюю неделю-две разросся в полноценный проект (делать было нечего, сидел допиливал его до вменяемого формата), вот теперь не знаю что с ним поделать.

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

Есть два варианта:
1. Впилить пример какого нить проекта и развивать решение
2. Выпилить проект и забыть

В данный момент решение хорошо подойдет для небольших и средних проектов, администрируемых не очень искушенными в PHP пользователями. Ориентир держу на декларативности, вот примерчик страницы со списком статей в блоге (сильно упрощенной):
<?php
// Пагинация
$start = isset($_GET['start'])? (int) $_GET['start'] : 0;
$offset = isset($_GET['offset'])? (int) $_GET['offset'] : 2;

$sp = [
  'layout' => [ // Переменные шаблона
    'title' => 'Статьи',
  ],
  'i18n' => [ // Интернационализация
    'domain' => '_locale',
  ],
  'pdo' => [ // Работа с БД
    'queries' => [
      'articles' => [ // Запрос списка статей
        'SELECT * FROM article LIMIT :start, :offset',
        'params' => [
          'start' => $start,
          'offset' => $offset,
        ],
      ],
      'articlesCount' => [ // Запрос количества статей
        'SELECT COUNT(*) AS count FROM article',
      ],
    ],
  ],
];
include('../sp.php');
$articlesCount = $articlesCount->fetch()->count;
?>
<!-- Шаблон -->
<h1>Статьи</h1>
<p>
  <ul>
      <?php foreach($articles as $article): ?>
          <li>
              <a href="/articles/view?id=<?= $article->id ?>">
                  <?= $article->title ?>
              </a>
          </li>
      <?php endforeach; ?>
  </ul>
  <ul>
      <li>
          Всего <?= i18n_plural($articlesCount, '%d article') ?>
      </li>
      <li>
        <a href="/articles/create"><?= i18n('create') ?></a>
      </li>
      <li>
        <a href="/articles?start=<?= $start - $offset ?>"><?= i18n('prev') ?></a>
      </li>
      <li>
        <a href="/articles?start=<?= $start + $offset?>"><?= i18n('next') ?></a>
      </li>
  </ul>
</p>


Будет ли интересно кому нить сие творение, или не стоит тратить время на документирование и примеры?
.
(\/)____o_O____(\/)
Delphinum, мне было бы жалко удалить, кинул бы на github а там видно будет, удалить то не поздно. примеры тут в теме же есть
.
Delphinum
Koenig, тут в теме очень малая часть того, что я впилил в нее за последнюю неделю, тем более тут нет примеров того, на что она впринципе способна. Чтоб все это описать, нужна еще неделя ) Вот думаю, стоит ли тратить на это время?

К сожалению современное программирование, это еще и маркетинг
.
(\/)____o_O____(\/)
Delphinum, ты туда кусками 3енд затащил?
.
Delphinum, сделай простенький сайт-визитку, будет полезен и посетителям (скачать поставить, запилить под себя) и тебе - наглядный пример простоты и функциональности.
вообще интересно, особенно с учетом простоты и легкости решений
.
Koenig, там чистейший php, даже классов нет. Старался не использовать ничего, кроме встроенных в язык средств и библиотек. Весь функционал легко подключается и отключается, для сайта-визитки можно не включать БД, тем самым ограничив тех. требования до одного только PHP
.
ramzes, я хреновый дизайнер-верстальщик, начну с документации и github, а после попробую какой нить примерчик реализовать, наверно
.
(\/)____o_O____(\/)
Delphinum, а список что имеется покажешь?
все на лямбдах?
.
# Delphinum (17.04.2017 / 12:51)
ramzes, я хреновый дизайнер-верстальщик, начну с документации и github, а после попробую какой нить примерчик реализовать, наверно
это как с ковбоями, там кольт всех уровнял, тут бутстрап)))
.
Delphinum
Добавлено: 17.04.2017 / 12:54
Koenig, нет, на лямбдах не все ) Все держится на трех основных "черепахах":
1. Конфигурации (декларации)
2. Плагины
3. Модули

Приведу несколько простых примеров:

Добавлено: 17.04.2017 / 12:58
Плагин layout
К примеру нужно тебе обернуть страницу в html код (head и body), подрубаешь плагин layout и указываешь в конфигурации адрес до используемой обертки:
// Файл /config.php - базовая конфигурация сайта
  'plugins' => [                                                                                                                     
    '_plugins/layout.php',                                                         
  ],
  'layout' => [                                                                    
    'title' => 'Стандартный title страницы',                                                       
    'layout' => '_layout/default.html',                                            
  ],

Сие можно изменить на любой странице сайта. На пример тебе нужен другой layout на странице статей:
<?php
// Файл /articles/index.php
$sp = [
  'layout' => [                                                                    
    'title' => 'Статьи',                                                       
    'layout' => '_layout/articles.html',                                            
  ],


Добавлено: 17.04.2017 / 13:01
Права доступа к страницам
Вот более живенький пример. Тебе нужно запретить юзерам доступ к странице создания статьи, подрубаешь плагин:
// Файл config.php
  'plugins' => [                                                                                                                                                             
    '_plugins/acl.php',                                                                                                                                          
  ],

Добавляешь на страницу правила доступа:
<?php
// Файл articles/create.php
$sp = [
  'acl' => [
    'allowed' => [
      'admin' => '*' // Только юзеры с ролью admin могут сюда попасть, остальным доступ закрыт
    ]
  ]
];


Добавлено: 17.04.2017 / 13:08
Не хочет джон добавлять очередной комент с примером ) Ну ладно, запилю на гитхаб наверно

Добавлено: 17.04.2017 / 13:11
Что сейчас умеет система:
Статичные страницы с сайта с возможностью полного переопределения поведения системы для конкретной страницы, вплоть до отключения ее логики
Обработка ошибок
Шаблонизация
Интернационализация (локализация)
Конфигурация прав доступа
Фильтрация входных данных
Декларативная работа с базой
Всего: 119