• Zarobi@aussie.zone
      link
      fedilink
      English
      arrow-up
      3
      arrow-down
      1
      ·
      1 day ago

      I prefer the flexibility of PHP personally, but there’s pros and cons to everything. For example, I don’t really see how setting up 11ty is any easier than a 10 line build.php. Might as well keep it simple

      • squirrel@cake.kobel.fyi
        link
        fedilink
        English
        arrow-up
        2
        ·
        13 hours ago

        I tried SSGs like 11ty, but they are overkill for simple things.

        I’d be interested in the 10 line build.php. Care to share?

        • Zarobi@aussie.zone
          link
          fedilink
          English
          arrow-up
          1
          ·
          11 hours ago

          Sure, I’m typing it out on my phone though so excuse any mistakes:

          Tap for build.sh
          # build.sh
          php build.php
          
          Tap for build.php
          // build.php
          <?php
          
          // Just contains all the directory definitions and utilities in one place
          require once __DIR__ . './bootstrap.php';
          require once __DIR__ . './utils.php';
          
          // Static assets
          ensureDir(DIST_DIR);
          copy_all_files(ASSETS_DIR, DIST_DIR);
          
          $files = new RecursiveIteratorIterator(
              new RecursiveDirectoryIterator(PAGES_DIR)
          );
          
          // Build each page
          foreach ($files as $file) {
              if ($file->isDir()) continue;
              $path = $file->getPathname();
          
              // only build .php pages (skip partials)
              if (!str_ends_with($path, '.php')) continue;
          
              $relative = str_replace('pages/', '', str_replace(SRC_DIR . '/', '', $path));
              $output = str_replace('.php', '/index.html', $relative);
          
              echo $relative . "\n";
              if ($relative == 'index.php') {
                  $outputPath = DIST_DIR . '/index.html';
              }
              else if (str_ends_with($output, 'index/index.html')) {
                  $output = str_replace('index/index.html', 'index.html', $output);
                  $outputPath = DIST_DIR . '/' . $output;
              }
              else {
                  $outputPath = DIST_DIR . '/' . $output;
              }
          
              ensureDir(dirname($outputPath));
              ob_start();
              include $path;
              $html = ob_get_clean();
          
              echo $outputPath . "\n";
              file_put_contents($outputPath, $html);
          }
          
          echo "Build complete\n";
          
          Tap for utils.php
          // utils.php
          
          function ensureDir($path) {
              if (!is_dir($path)) {
                  mkdir($path, 0777, true);
              }
          }
          
          function copy_all_files($source_dir, $target_dir) {
              $dir_obj = opendir($source_dir);
              @mkdir($target_dir);
              while ($file = readdir($dir_obj)) {
                  if ($file != "." && $file != "..") {
                      if (is_dir($source_dir . "/" . $file)) {
                          copy_all_files($source_dir . "/" . $file, $target_dir . "/" . $file);
                      } else {
                          copy($source_dir . "/" . $file, $target_dir . "/" . $file);
                      }
                  }
              }
              closedir($dir_obj);
          }
          
          Tap for bootstrap.php
          <?php
          define('ROOT_DIR', __DIR__);
              define('DIST_DIR',  ROOT_DIR . '/dist');
              define('SRC_DIR',   ROOT_DIR . '/src');
                  define('PAGES_DIR',     SRC_DIR . '/pages');
          // etc
          

          I stripped out all the database stuff because as my site grew I kept expanding on it and I needed a database.

          Mine will also probably be longer than average because I wanted fancy stuff like my source pages being just “about.php” instead of “about/index.php”, but I wanted the output to be “about/index.html” so it got way more complicated than it needed to be. But again most of those lines in the for loop are just me being obsessive compulsive about my own directory structure 😂. I also didn’t count the utilities functions in my original line count because to me that’s equivalent of importing a module; I didn’t write that file, I just copy pasted it from online. You could probably find a simpler build script online.

          Tap for example.php
          <?php
          $pageTitle = 'Example';
          ?>
          
          <!DOCTYPE html>
          <html lang="en">
          <head>
              <?php include PARTIALS_DIR . '/head.php'; ?>
              <link rel="stylesheet" href="/styles/example.css" />
          </head>
          <body>
              <?php include PARTIALS_DIR . '/header.php'; ?>
              <?php include PARTIALS_DIR . '/noscript.php'; ?>
              <main>
                  <h1>example</h1>
              </main>
          
              <?php include PARTIALS_DIR . '/footer.php'; ?>
              <?php include PARTIALS_DIR . '/global-scripts.php'; ?>
          </body>
          </html>
          
      • eleitl@lemmy.zip
        link
        fedilink
        arrow-up
        1
        ·
        1 day ago

        PHP is additional vulnerability, while static html is bullet proof, as long as http server is safe and up to date.

        • Zarobi@aussie.zone
          link
          fedilink
          English
          arrow-up
          1
          ·
          1 day ago

          How is PHP a vulnerability if it never leaves your machine and you only use it to build the HTML?

          • eleitl@lemmy.zip
            link
            fedilink
            arrow-up
            2
            ·
            1 day ago

            Oh, if you’re only using it to generate static html it’s of course safe. I would prefer minimal markdown for blogs, though.