Как преобразовать наборы/фреймы HTML в iframe в настройках PHP — сценарий и решение 2020

Здесь на эту тему было прочитано много советов специалистов. Хотя иногда это было очень общим и не включало предложение не использовать решения Bootstrap или Flexbox для этой дилеммы.

Для всех тех из вас, у кого есть исторический набор фреймов HTML с несколькими фреймами, я хотел бы показать вам, как я сделал это преобразование из исходных файлов кода PHP. Будучи очень благодарным за все профессиональные советы, которые я лично смог собрать по переполнению стека, я хотел бы кое-что вернуть здесь.

Базовая структура макета выглядит следующим образом:

    +---------------------------------------------------------+
    | (1)                                                     |
    +---------------------------------------------------------+
    | (2)                                                     |
    +---------------------------------------------------------+
    | (3) |                 frameBody                   | (4) |
    |     |                                             |     |
    |     |                                             |     |
    |     |                                             |     |
    |     |                                             |     |
    |     |                                             |     |
    |     |                                             |     |
    |     |                                             |     |
    +---------------------------------------------------------+
    | (5)                                                     |
    +---------------------------------------------------------+

Легенда:

(1) - Заголовок заголовка; (2) - фреймМеню; (3) - пользовательское меню; (4) - Меню пациента; (5) - Нижний колонтитул.

После успешного входа в систему с login.php меня перенаправляют на site.php, который берет на себя управление всем веб-сайтом. В этом файле управляются все условия перехода от условий к условиям и, таким образом, к соответствующим другим файлам PHP.

site.php, однако, также заботится об основном макете веб-сайта, здесь в старом стиле frameset/frame/noframes (пожалуйста, извините за длинность примера кода, но я хочу показать вам, насколько красиво короткий и хорошо структурированный iframe решение может быть):

    <?php
        // Lots of definitions and introductory stuff, not relevant here
    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=<?= strtolower($CHARSET) ?>" />
        <meta name="author" content="whoever" />
        <meta name="date" content="<?= date('r', filectime($_SERVER['SCRIPT_FILENAME'])) ?>" />
    <title><?= $sCompanyName ?></title>
    </head>

    <frameset name="alles" cols="20,*,20" framespacing="0" frameborder="0" border="0" />
        <frameset rows="20,50,120,*,40,20" framespacing="0" frameborder="0" border="0" />
            <frame name="headerTitle" src="frameHeader.php" scrolling="no" noresize="noresize" />
            <frame name="frameMenu" src="frameMenu.php" scrolling="no" noresize="noresize" />

    <?php
        if (isset($_REQUEST['sBody']) && $_REQUEST['sBody'] == 'login')
        echo '<frame name="frameBody" src="login.php' . $sLanguageString . '">';
        else {
    ?>

            <frameset name="Frame1" cols="225,1,*,1,225" framespacing="0" frameborder="0" border="0">
                <frame name="userMenu" id="userMenu" src="userMenu.php" />
                <frame name="frameBody" src="<?= $sBody . (strlen($sURLParameterString) > 1 ? $sURLParameterString : '') ?>" />
                <frame name="patientMenu" id="patientMenu" src="patientMenu.php"/>
            </frameset>
            <frame name="footerTitle" src="frameFooter.php" scrolling="no" noresize="noresize" />
        </frameset>

    <?php
        }
    ?>

        <noframes>
        <body>

    <?php
        setSysMsg($oSysMsg->getExpression('general', 'noFrameSupport', 'This site is based on frames. But your browser doesn\'t support frames.<br />Your should choose another internet browser.'));
        echo getLastSysMsg();
    ?>

        </body>
        </noframes>
    </frameset>
    </html>

Какие сейчас препятствия для легкой конверсии?


person mtjmohr    schedule 17.10.2020    source источник


Ответы (1)


Все они относятся только к моему стилю работы (помимо других профессиональных навыков, о которых вы можете прочитать в моем профиле, я разработал большие наборы документации и анализа данных [WAMP, LAMP, MAMP] для работы со специальными типами медицинской документации), но если вы оказаться в подобном своевременном состоянии, эта ситуация может быть похожа на ваше собственное мышление:

Препятствие № 1: Готовые решения для реализации сеток, такие как Bootstrap или Flexbox, также можно сделать, но использование их файлов CSS и JS часто требует большой индивидуальной адаптации, если вы хотите, чтобы размеры, формы и цвета были вашими. способ.

Препятствие № 2: лично я предпочитаю экспериментировать в небольшой, простой для понимания среде, прежде чем внедрять свое решение в более крупную структуру, такую ​​как Bootstrap и Flexbox (и, возможно, другие).

Препятствие № 3: у меня просто нет времени часами сидеть перед экраном, чтобы проверить некоторые элементы макета, когда мне очень нужно провести анализ и оценку данных.

Таким образом, поэкспериментировав с WampServer на моем локальном хосте, я нашел следующее решение:

    <?php
        // Same lots of definitions and introductory stuff, again not relevant here
    ?>

    <!DOCTYPE html>
    <html lang="whatever">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=<?= strtolower($CHARSET) ?>" />
        <meta name="date" content="<?= date('r', filectime($_SERVER['SCRIPT_FILENAME'])) ?>" />
        <title><?= $sCompanyName ?></title>
    </head>

    <div>
        <iframe style="top:0px; width:100%; height:40px; border:2px red; background-color:grey; display:block; position:fixed;" id="headerTitle" name="headerTitle" scrolling="no" frameborder="1" marginheight="0px" marginwidth="0px" src="frameHeader.php" /></iframe>
    </div>

    <div>
        <iframe style="top:40px; width:100%; height:120px; border:2px red; background-color:grey; display:block; position:fixed;" id="frameMenu" name="frameMenu" scrolling="no" frameborder="1" marginheight="0px" marginwidth="0px" src="frameMenu.php" /></iframe>
    </div>

    <?php
        if (isset($_REQUEST['sBody']) && $_REQUEST['sBody'] == 'login')
        echo '<iframe name="frameBody" src="login.php' . $sLanguageString . '">';
        else {
    ?>

    <div style="float:left;">
        <iframe style="top:160px; width:225px; height:100%; border:2px blue; background-color:grey; display:inline-block; position:fixed;" id="userMenu" name="userMenu" scrolling="yes" frameborder="1" marginheight="0px" marginwidth="0px" src="userMenu.php" /></iframe>
    </div>

    <div>
        <iframe style="top:160px; left:225px; width:100%; height:100%; border:2px blue; background-color:lightgrey; display:inline-block; position:fixed;" id="frameBody" name="frameBody" scrolling="yes" frameborder="1" marginheight="0px" marginwidth="0px" src="<?= $sBody . (strlen($sURLParameterString) > 1 ? $sURLParameterString : '') ?>" allowfullscreen /></iframe>
    </div>

    <div style="float:right;">
        <iframe style="top:160px; right:0px; width:225px; height:100%; border:2px blue; background-color:grey; display:inline-block; position:fixed;" id="patientMenu" name="patientMenu" scrolling="yes" frameborder="1" marginheight="0px" marginwidth="0px" src="patientMenu.php" /></iframe>
    </div>

    <div>
        <iframe style="bottom:0px; width:100%; height:40px; border:2px red; background-color:grey; display:block; position:fixed;" id="footerTitle" name="footerTitle" scrolling="no" frameborder="1" marginheight="0px" marginwidth="0px" src="frameFooter - Kopie.php" /></iframe>
    </div>

    <?php
        }
    ?>

    </html>

Имейте в виду, что это, конечно, хороший, если не обязательный шаг, чтобы преобразовать операторы style="whatever" во внешний файл CSS, но здесь это не обязательно, чтобы показать вам, что я имею в виду.

Важно не менять операторы name="something" из фреймов в фреймы, так как они нужны для отсылки, например, ссылки меню, ссылающейся на вышеупомянутый код с frameBody (см. там):

    [... preceding code ...]

    <li><a target="frameBody" href="dothis.php">Do this</a></li>
    <li><a target="frameBody" href="dothat.php">Do that</a></li>
    <li><a target="frameBody" href="dosomethingcompletelydifferent.php">Do something completely different</a></li>

    [... further code ...]

allowfullscreen — это просто необязательный элемент на тот случай, если один из этих фреймов нужно сделать полноэкранным с помощью соответствующего кода javascript (здесь не указан).

И, наконец, изменение как <!DOCTYPE ...>, так и <html ...> соответствует возможности использовать HTML 5 вместо старого объявления HTML 4, которое должно было ссылаться на DTD (определение типа документа).

Я надеюсь, что этот фрагмент кода поможет в общем виде перейти от наборов фреймов HTML к фреймам HTML на пути к решению без фреймов в качестве следующего возможного шага.

person mtjmohr    schedule 17.10.2020