簡體   English   中英

PHP + Slim PHP框架:如何在文檔頭中動態添加樣式表?

[英]PHP + Slim PHP Framework: How to dynamically add stylesheets to the document head?

我用登錄表單,儀表板,注冊頁面和帳戶頁面創建了一個簡單的苗條應用程序。 每個頁面都有自己的路線。 所有頁面使用相同的頁眉和頁腳,通過添加<?php include __DIR__ . '/header.phtml' ?>來包含這些頁眉和頁腳<?php include __DIR__ . '/header.phtml' ?> <?php include __DIR__ . '/header.phtml' ?><?php include __DIR__ . '/footer.phtml' ?> <?php include __DIR__ . '/footer.phtml' ?>到每個頁面模板的開頭和結尾,頁面內容放置在它們之間。

我想根據查看的頁面動態地包含不同的樣式表,但是我不想只是懶惰地將它們放置在我的.phtml文件中,並將它們呈現在網頁的中間。

我想開發一些if / switch函數,將其放置在header.phtml文件中,該文件可以識別當前路由並提供指向適當樣式表的鏈接。 將以下代碼放置在文檔頭中:

<?php
if($currRoute === "/dashboard") {
  ?>
  <link rel="stylesheet" type="text/css" href="assets/css/dashboard.css">
  <?php
} else if($currRoute === "/register") {
  ?>
  <link rel="stylesheet" type="text/css" href="assets/css/register.css">
  <?php
} else if ($currRoute === "/account") {
  ?>
  <link rel="stylesheet" type="text/css" href="assets/css/account.css">
  <?php
}
?>

在上面的示例中,是否有任何解決方案來獲取$currRoute的值,而無需一些復雜的正則表達式,任何其他語言,類庫等?

我沒有嘗試檢索當前路由,而是在每個路由回調中創建了一個包含路由名稱的字符串變量,然后將該名稱作為參數傳遞給渲染器(在這種情況下,我使用的是Slim的php-view包)。 這是一個示例,將字符串"dashboard"作為參數傳遞給dashboard.phtml模板文件:

$app->get('/dashboard', function (Request $request, Response $response, array $args) {
  $args['pageTitle'] = "dashboard";
  return $this->renderer->render($response, 'register.phtml', $args);
});

根據路由名稱,為$args['pageTitle']鍵分配了一個字符串形式的關鍵字標識符。

然后,在header.phtml文件中,我創建了一個switch語句,該語句將$args['pageTitle']與一組硬編碼的字符串進行比較,以確定要加載的適當樣式表:

<head>
  <title>Slim 4 PHP Template</title>

  <?php
    if(isset($pageTitle)) {
      switch($pageTitle) {
        case "dashboard":
          echo "<link rel='stylesheet' type='text/css' href='assets/css/dashboard.css'>";
          break;
        case "register":
          echo "<link rel='stylesheet' type='text/css' href='assets/css/register.css'>";
          break;
      }
    }
  ?>
</head>

在“ http://example.domain.com/dashboard ”上訪問路由時,將呈現到相應樣式表的鏈接,如下所示:

<head>
  <title>Slim 4 PHP Template</title>

  <link rel="stylesheet" type="text/css" href="assets/css/dashboard.css">
</head>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM