ФорумПрограммированиеPHP для идиотовPHP и ООП → Класс ресурсов (css,images,js)

Класс ресурсов (css,images,js)

  • iphine5g

    Сообщения: 221 Репутация: N Группа: Кто попало

    Spritz 3 декабря 2011 г. 19:20

    Не хочу в речную все это делать (писать пути, подключать), решил сделать так.

    Вот мой первый класс, постигаю азы ООП, надеюсь я не безнадежен))



    class ResourcesConnector
    {

    private $abs_css_path;
    private $abs_js_path;
    private $abs_img_path;

    private $css_path;

    function setAbsPaths($abs_css_path, $abs_js_path, $abs_img_path)
    {
    $this->abs_css_path = $abs_css_path;
    $this->abs_js_path = $abs_js_path;
    $this->abs_img_path = $abs_img_path;
    }

    function setPaths($css_path)
    {
    $this->css_path = $css_path;
    }

    function CSS()
    {

    $open_css_folder = opendir($this->abs_css_path);

    while ($filename = readdir($open_css_folder)) {
    if ($filename != '.' and $filename != '..') {
    echo '<link rel="stylesheet" type="text/css" href="' . $this->css_path, $filename .'" />';
    }

    }


    }

    function HEAD_OPEN($title)
    {
    echo '<!DOCTYPE html>';
    echo '<html><head>';
    echo '<title>'. $title .'</title>';
    }


    function HEAD_CLOSE()
    {
    echo '</head>';
    }

    function BODY_OPEN()
    {
    echo '<body>';
    }

    function BODY_CLOSE()
    {
    echo '</body></html>';
    }

    function monsterStart($smartyObj, $pageTitle, $tplNmae)
    {
    $this->HEAD_OPEN($pageTitle);
    $this->CSS();
    $this->HEAD_CLOSE();
    $this->BODY_OPEN();
    $smartyObj->display($tplNmae);
    $this->BODY_CLOSE();
    }
    }



  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 декабря 2011 г. 19:26, спустя 5 минут 56 секунд

    пиздец
    Сапожник без сапог
  • iphine5g

    Сообщения: 221 Репутация: N Группа: Кто попало

    Spritz 3 декабря 2011 г. 19:27, спустя 1 минуту 24 секунды


    пиздец
    не нужно было так делать да?))
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 декабря 2011 г. 19:37, спустя 9 минут 43 секунды

    iphine5g, да это ваще пиздец чувак. это вообще даже не знаю как объяснить. да, не нужно было)
    Сапожник без сапог
  • iphine5g

    Сообщения: 221 Репутация: N Группа: Кто попало

    Spritz 3 декабря 2011 г. 19:50, спустя 12 минут 56 секунд

    function CSS()
        {
     
            $open_css_folder = opendir($this->abs_css_path);
     
            while ($filename = readdir($open_css_folder)) {
                if ($filename != '.' and $filename != '..') {
                    echo '<link rel="stylesheet" type="text/css" href="' . $this->css_path, $filename .'" />';
                }
     
            }
     

        }



    можно хоть подключение стилей оставлю?))
  • Tekuto

    Сообщения: 1147 Репутация: N Группа: Адекваты

    Spritz 3 декабря 2011 г. 20:12, спустя 21 минуту 38 секунд

    Нафига это тебе?
    Спустя 277 сек.
    А как скрипт определяет, где таблица стилей лежит?
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 3 декабря 2011 г. 20:14, спустя 2 минуты 39 секунд

    iphine5g, все решения диктуются необходимостью. поэтому ты сначала обдумываешь как использовать и только потом придумываешь внутренний код.

    вот как я использую свой класс.
    задача: размещать css в head, а все скрипты - перед закрывающимся тегом body (как это выглядит в html можно посмотреть например здесь). при этом чтоб запрашивать скрипты и стили можно было в любом месте любого шаблона и подшаблона. также требуется автоматически удалять дубликаты скриптов и стилей (т.е. если я из двух подшаблонов запрошу jquery тег <script src="jquery.js"></script> должен быть вставлен только один раз).

    я пишу в шаблоне:

    <html>
    <head>
    {resources->require_css src="/css/my.css"}
    {resources->require_jquery}
    {resources->insert_css}
    </head>
    <body>
    // тут вставляем содержимое основной части, пусть это будет модуль, где вьюха берётся из подшаблона
    {resources->insert_scripts}
    </body>
    </html>


    в подшаблоне:

    {resources->require_jquery}
    <div>blablabla1</div>
    {resources->require_js src="/js/my.js"}
    <div>blablabla2</div>
    {resources->require_css src="/css/my2.css"}


    на выходе получаем

    <html>
    <head>
    <link rel="stylesheet" type="text/css" src="/css/my.css" />
    <link rel="stylesheet" type="text/css" src="/css/my2.css" />
    </head>
    <body>
    <div>blablabla1</div>
    <div>blablabla2</div>
    <script src="/js/jquery-latest.js"></script>
    <script src="/js/my.js"></script>
    </body>
    </html>


    как именно это реализуется в коде - дело десятое, многие тут смогут написать реализацию этой идеи если им будет надо
    не всё полезно, что в swap полезло
  • iphine5g

    Сообщения: 221 Репутация: N Группа: Кто попало

    Spritz 3 декабря 2011 г. 20:48, спустя 33 минуты 43 секунды

    setAbsPaths

    setAbsPaths()
  • iphine5g

    Сообщения: 221 Репутация: N Группа: Кто попало

    Spritz 3 декабря 2011 г. 20:59, спустя 10 минут 41 секунду


    iphine5g, все решения диктуются необходимостью. поэтому ты сначала обдумываешь как использовать и только потом придумываешь внутренний код.

    вот как я использую свой класс.
    задача: размещать css в head, а все скрипты - перед закрывающимся тегом body (как это выглядит в html можно посмотреть например здесь). при этом чтоб запрашивать скрипты и стили можно было в любом месте любого шаблона и подшаблона. также требуется автоматически удалять дубликаты скриптов и стилей (т.е. если я из двух подшаблонов запрошу jquery тег <script src="jquery.js"></script> должен быть вставлен только один раз).

    я пишу в шаблоне:

    <html>
    <head>
    {resources->require_css src="/css/my.css"}
    {resources->require_jquery}
    {resources->insert_css}
    </head>
    <body>
    // тут вставляем содержимое основной части, пусть это будет модуль, где вьюха берётся из подшаблона
    {resources->insert_scripts}
    </body>
    </html>


    в подшаблоне:

    {resources->require_jquery}
    <div>blablabla1</div>
    {resources->require_js src="/js/my.js"}
    <div>blablabla2</div>
    {resources->require_css src="/css/my2.css"}


    на выходе получаем

    <html>
    <head>
    <link rel="stylesheet" type="text/css" src="/css/my.css" />
    <link rel="stylesheet" type="text/css" src="/css/my2.css" />
    </head>
    <body>
    <div>blablabla1</div>
    <div>blablabla2</div>
    <script src="/js/jquery-latest.js"></script>
    <script src="/js/my.js"></script>
    </body>
    </html>


    как именно это реализуется в коде - дело десятое, многие тут смогут написать реализацию этой идеи если им будет надо
    а зачем скрипты вниз вообще пихать?
    Спустя 11 сек.
    я про js
    Спустя 59 сек.
    я общие правила стилей описываю в одном месте, а на каждую страницу создаю свой файл стиля
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 3 декабря 2011 г. 21:08, спустя 9 минут

    а зачем скрипты вниз вообще пихать?

    http://developer.yahoo.com/performance/rules.html#js_bottom
    не всё полезно, что в swap полезло
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 3 декабря 2011 г. 23:36, спустя 2 часа 28 минут 42 секунды

    iphine5g, ну, из того что я заметил, и что явно нужно будет в первую очередь исправлять/доделывать:
    1. Раз уж указываешь членам класса их доступность, то почему не делаешь то же самое и для методов класса? Это нужно делать.
    2. Класс (и его методы) вообще не должны бы ничего выводить на экран. Точнее, это сделать можно, но, так как у тебя все методы выводят куски обязательной информации (то есть каждый из методом обязательно должен вывести свой кусок хмтл-кода, иначе лажа), то корректнее будет сделать отдельный метод с выводом всего собранного в кучу кода. И именно этот метод будет делать вывод на экран, а не те методы, который он вызывает.
    3. Мастер примерно прав - нужно писать решение исходя из задачи, а не пытаться создать задачу исходя из имеющегося решение (да ещё и кривого).
  • komprenda

    Сообщения: 24 Репутация: N Группа: Кто попало

    Spritz 15 мая 2012 г. 12:31, спустя 163 дня 12 часов 54 минуты

    Можно и так обойтись



    <?php

    header('Cache-Control: no-cache, must-revalidate');
    header('Pragma: no-cache');

    ?>
    <!DOCTYPE html>
    <html>
    <head>
    <?php if (!empty($base_url)) { ?>
    <base href="<?=$base_url?>">
    <?php } ?>
    <meta charset="utf-8">
    <?php if (!empty($keywords)) { ?>
    <meta name="keywords" content="<?=$keywords?>">
    <?php } ?>
    <?php if (!empty($description)) { ?>
    <meta name="description" content="<?=$description?>">
    <?php } ?>
    <?php if (!empty($title)) { ?>
    <title><?=$title?></title>
    <?php } ?>
    <?php

    if (!empty($css_arr)) {
    for ($i = 0, $j = count($css_arr); $i < $j; ++$i) {

    ?>
    <link rel="stylesheet" type="text/css" href="<?=$css_arr[$i]?>">
    <?php

    }
    }

    ?>
    <?php

    if (!empty($js_arr)) {
    for ($i = 0, $j = count($js_arr); $i < $j; ++$i) {

    ?>
    <script type="text/javascript" src="<?=$js_arr[$i]?>"></script>
    <?php

    }
    }

    ?>
    <?php if (!empty($css)) { ?>
    <style type="text/css"><?=$css?></style>
    <?php } ?>
    <?php if (!empty($js)) { ?>
    <script type="text/javascript"><?=$js?></script>
    <?php } ?>
    </head>
    <body>



Пожалуйста, авторизуйтесь, чтобы написать комментарий!