1

Тема: Body class для Yii

Хочу реалізувати body class, щоб розуміти, яку саме сторінку переглядаю. У WP це працює неймовірно просто:

<body <?php body_class($class); ?>>

Для Yii знайшов декілька порад:  тут і тут . Зробив все, як написано, але без результату. Проблема ускладнюється ще тим, що в мене в якості надбудови над yii стоїть така собі CMS yupe, і контролери працюють через неї. Може хтось порадиться в який бік рухатися? Або як хоча б яким чином можна інакше реалізувати  body class

2

Re: Body class для Yii

В боді клас ви можете вставити роут який спрацював. Клас уіі містить компонент роутера, ось до нього і звертайтесь;-)

3

Re: Body class для Yii

ого як все складно. Як знайти цей роут ? Чи існує інший метод моніторингу сторінок, як то є у WP за допомогою body class ?

4

Re: Body class для Yii

Ось як варіант:

echo Yii::app()->controller->getId() . '/' . Yii::app()->controller->getAction()->getId();

Стрічку можна відформатувати як потрібно і розбити на куски.

Для чого вам потрібен body class ?

5

Re: Body class для Yii

funivan написав:

...
Для чого вам потрібен body class ?

Судячи з усього - мається на увазі клас CSS, який потрібно визначати в залежності від URL.

Мабуть для цієї задачі необхідно прописати в функції body_class() мапінг між URL та відповідним йому CSS класом.

6

Re: Body class для Yii

все виявилося неймовірно просто. Достатньо написати

<body class="<?= $this->route ?>">

7 Востаннє редагувалося ktretyak (25.02.2014 18:06:14)

Re: Body class для Yii

karmeljuk написав:

все виявилося неймовірно просто. Достатньо написати

<body class="<?= $this->route ?>">

а якщо буде, скажімо, хоч один параметр? Мабуть все-таки треба трохи ускладнити цю простоту. Хоча якщо в наведеному прикладі повертається лише назва роута, то все простіше.

8

Re: Body class для Yii

Мені вертається щось на кшталт blog/blog/show. Але хотіло ся би якось інакше, як воно у WP

9

Re: Body class для Yii

Спочатку створіть хелпер, наприклад:
[code=php]
<?php
class A{

    public static function simple_body_class($url)
    {
        return str_replace(array('/','_'), array('-','-'), $url);
    }

    public static function body_class($url)
    {
        $mapping = array(
            'blog/show' => 'blog-show'
            ,'admin' => 'for-admin-class'
            ,'user' => 'for-user-class'
        );
       
        if (isset(mapping[$url]))
        {
            return mapping[$url];
        }
        else
        {
            return false;
        }
    }
}
?>
[/code]
Перший метод простіший, бо замінює лише спецсимволи з URL на дефізи

<body class="<?= A::simple_body_class($this->route) ?>">

Другий варіант трохи складніший:

<body class="<?= A::body_class($this->route) ?>">

10

Re: Body class для Yii

трохи дурне питання: куди засунути створений хелпер. Можу скинути знімок структури проекту

11

Re: Body class для Yii

karmeljuk написав:

трохи дурне питання: куди засунути створений хелпер. Можу скинути знімок структури проекту

Ну ви ж вмієте автозавантаження класів організовувати? Чи ви маєте на увазі куди краще в структурі? Якщо так, то я з Yii не знайомий.

12 Востаннє редагувалося karmeljuk (26.02.2014 16:53:23)

Re: Body class для Yii

subl свариться на

mapping[$url]

Можливо так має бути?

$mapping[$url]

13

Re: Body class для Yii

karmeljuk, все правильно саме так

$mapping[$url]

, я просто код не запускав, написав нашвидкоруч.

14

Re: Body class для Yii

Дякую. Перший спосіб запустився. Другий видає

<body class=""><script type="text/javascript">

15

Re: Body class для Yii

karmeljuk написав:

Дякую. Перший спосіб запустився. Другий видає

<body class=""><script type="text/javascript">

А ви в масиві $mapping замінили значення на свої? Я ж там навів просто приклади.

16

Re: Body class для Yii

я не знаю який в мене $mapping, я розгрібаю чужий проект на незнайомому фреймворку

17

Re: Body class для Yii

Передивіться ще раз мій приклад, там є цей масив.