PHP Условный Вопрос - PullRequest
       41

PHP Условный Вопрос

1 голос
/ 13 сентября 2011

Здравствуйте, сообщество StackOverflow, надеюсь, вы, ребята, можете помочь мне с этим здесь:

На моей домашней странице есть структура DIV, которая в основном имеет <div id="container">, которая имеет <h1> и <div id="content">.

У меня также есть некоторый JavaScript, который заставляет <div id="content"> скользить вверх / вниз при нажатии <h1>, вставляя или удаляя класс ".open" в <div id="content">.

Теперь я хочу создать с использованием PHP и условных эхо-сообщений, если <div id="content"> имеет класс ".open", и что-то еще, если нет.

Вот что я пытался сделать:

Существует такой Javascript:

            <script type="text/javascript">
                  $(function() {
                        $('.container h1').bind('click', function() {
                            if ($(this).parent().hasClass('open')) {
                                $(this).parent().find('.content').slideUp();
                                $(this).parent().removeClass('open');
                                return 0;
                            }
                            $(this).parent().parent().find('.content').slideUp();
                            $(this).parent().find('.content').slideDown();
                            $(this).parent().addClass('open');
                        })
                     });
            </script>

Это работает на этом:

            <div id="container">
                <h1><a href="javascript:void(null)">Open the content</a></h1>
                <div id="content">
                    <p>Content 1</p>
                </div>  
            </div>      
            <div id="container">
                <h1><a href="javascript:void(null)">Open the content</a></h1>
                <div id="content">
                    <p>Content 2</p>
                </div>  
            </div>     

Пока все работает отлично. Теперь я хочу создать условие с PHP, которое будет выводить что-то, когда любой имеет класс .open, но я не могу понять, как написать это. Вот что я придумал:

            <? if '#content'.class='open'{
                  echo include('column-right1.php'); 
                  echo include('column-right2.php'); 
                }
                else {
                  echo include('column-right3.php');  
                {
            ?>

Если это невозможно в PHP, каким будет сценарий для javaScript и / или Jquery для него?

Ответы [ 4 ]

4 голосов
/ 13 сентября 2011

Вы должны понимать фундаментальную разницу между сценариями на стороне клиента и на стороне сервера.

PHP работает на вашем сервере и подготавливает страницу перед отправкой пользователю. Это серверная часть, бэкэнд вашего приложения. Все, что здесь происходит, происходит на ваших центральных серверах, если вы, например, пытались открыть файл, который был бы на жестком диске вашего сервера.

После того, как клиент получит ваши запросы, ваш HTML / CSS / Javascript будет проанализирован, все это на стороне клиента. Все здесь связано с пользователем, ничего не возвращается на сервер. В этой среде, чтобы взаимодействовать с пользователем, например, спросите его положение мыши или скрыть и показать различные элементы.

Короче говоря, PHP не может взаимодействовать с пользователем, но является центральным и в одном месте, в то время как javascript может и распространяется среди ваших пользователей.

2 голосов
/ 13 сентября 2011

Вы смешиваете PHP и HTML / CSS.Я бы порекомендовал проверить в другом месте вашего кода, чтобы увидеть, как устанавливается класс, и делать это таким образом.В противном случае вам потребуется использовать буферизацию вывода, и для простого шаблона HTML будет очень грязно.

Короче говоря, вы смешиваете две вещи так, что их нельзя смешивать.

1 голос
/ 13 сентября 2011

Если бы это был я, я бы использовал jquery и сделал бы что-то вроде этого:

  1. дать идентификатор div, где вы добавляете ".aberto" наподобие id = "content" class = "content aberto"
  2. Проверьте, существует ли класс
  3. Загрузите php-файл, который вы хотите
if ($('#content').hasClass('aberto')) {
   $("#some_div_id").load('column-right1.php');
   $("#other_div_id").load('column-right2.php');
}else{
   $("#else_div_id").load('column-right3.php');
}

Адаптируй и попробуй;)

Вы должны начать с включения файла в ваш index.php прямо перед закрытием тега ... что-то вроде:

<script type="text/javascript" src="http://www.daterraweb.com/js/onload.js"></script>

Затем в файле onload.js вы помещаете код, упомянутый выше ... как

$(document).ready(function(){
 if ($('#content').hasClass('aberto')) {
       $("#some_div_id").load('column-right1.php');
       $("#other_div_id").load('column-right2.php');
    }else{
       $("#else_div_id").load('column-right3.php');
    }
}
  1. Вы должны быть осторожны с путями для файлов php
  2. У вас должны быть все важные div с желаемым идентификатором и сопоставление его с кодом jquery.

ПРИМЕЧАНИЕ. Если вы хотите загрузить содержимое сразу после вставки класса .open, просто измените его на что-то вроде этого:

       <script type="text/javascript">
              $(function() {
                    $('.container h1').bind('click', function() {
                        if ($(this).parent().hasClass('open')) {
                            $(this).parent().find('.content').slideUp();
                            $(this).parent().removeClass('open');
                            $("#else_div_id").load('column-right3.php');
                            return 0;
                        }
                        $(this).parent().parent().find('.content').slideUp();
                        $(this).parent().find('.content').slideDown();
                        $(this).parent().addClass('open');
                        $("#some_div_id").load('column-right1.php');
                        $("#other_div_id").load('column-right2.php');
                    })
                 });
        </script>
0 голосов
/ 13 сентября 2011

Вы не можете сделать это в PHP, не отобразив полное содержимое HTML в какой-либо функции PHP.Некоторые пользователи определенно публикуют некоторые странные рамки для этого, но это неправильно.

Вы должны понимать, что PHP рассчитывается раньше, чем HTML.Так что этот метод принципиально невозможен.Вы должны работать наоборот.Вы должны определить класс HTML, основанный на PHP, а не наоборот.Каковы условия наличия класса 'alberto' в вашем контейнере?

Похоже ли это на то, что ваш JavaScript динамически добавляет этот класс, а затем вы хотите, чтобы PHP воздействовал на него?Это приводит к другому выводу, что PHP не очень динамичен в этом смысле.PHP требуется перезагрузка для отображения результатов (если только не используется через AJAX.) Однако, если вы хотите изменить содержимое вашего контейнера на основе класса. Вы также можете использовать JavaScript для этого и метод AJAX.Это означает, что JavaScript загрузит содержимое из удаленного файла PHP и изменит содержимое HTML вашего контейнера.

Некоторые материалы для чтения для вас:

  1. http://www.sitepoint.com/ajax-jquery/
  2. http://webdosanddonts.com/fundamental-php-coding-dos-donts

PS: Также ваше утверждение if неверно.Правильно будет: if ($foo == true)

...