PHP foreach, CSS и jQuery скрипт. Как взаимодействовать? - PullRequest
1 голос
/ 10 августа 2011

Я пытаюсь использовать скрипт jQuery show / hide для файла PHP, и он выглядит так:

<?php
foreach ($empresas as $empresa) {
echo "<style type='text/css'>
.$empresa[teaserid] { 
width:100%;
background-color: #CCC;
color: #000;
margin-top:10px;
border:1px solid #CCC;
position:relative;
vertical-align:middle;
}
.showhide$empresa[teaserid] {
    display:none;
}
</style>";
echo '<script type="text/javascript">';
echo ' $(document).ready(function(){ ';
echo '         $(\".$empresa[teaserid]\").hide(); ';
echo '         $(\".showhide$empresa[teaserid]\").show(); ';
echo '  $(\".showhide$empresa[teaserid]\").click(function(){ ';
echo '  $(\".$empresa[teaserid]\").slideToggle(), 500; ';
echo '  }); ';
echo ' });';
echo '</script>';
echo "<a href='#' class='showhide$empresa[teaserid]'>$empresa[titulo]</a><br />
    <div class='$empresa[teaserid]'>
TEST</div>";
}
?>

Итак, мне нужен foreach в php, который отображает новые значения CSS и новый скрипт jQuery. потому что каждый DIV нуждается в разных CSS и jQuery, чтобы иметь возможность связывать и показывать и скрывать свой контент. Это эхо не сработало. CSS работает нормально, но jQuery не работает со строками PHP $. Что я могу сделать? Или есть более простой способ сделать это? Функция jQuery, которая относится к любому текущему div? Спасибо всем, кто помогает мне в этом ..

Ответы [ 3 ]

1 голос
/ 10 августа 2011

Стоит упомянуть:

Вы можете создать объект настроек для хранения ваших переменных. Например:

Ваш php:

<?php
    $settings = array( 'settingA' => 'something',
                       'settingB' => 'something else',
                       'wat'      => 9001 );
?>

Держите свой JS в своем файле js - scripts.js, что угодно. Но вы можете добавить это в свой HTML-файл:

<script>
   var settings = <?php echo json_encode( $settings ) ?>;
</script>

Что это даст?

var settings = {"settingA":"something","settingB":"something else","wat":9001};

Таким образом, вы можете поместить необходимую вам информацию о сервере в ОДИН глобальный объект (или поместить ее как свойство объекта вашего приложения или чего-то еще) и получить к ней доступ.

console.log( settings.settingA ); // returns "something"

Глядя дальше на свой вопрос, не забывайте, что вам не нужно оставаться в тегах PHP. Я не защищаю когда-либо необходимость PHP в вашем css, но это должно помочь вам понять концепцию:

<style>
  <?php foreach ($empresas as $empresa): ?>
    .showhide<?php echo $empresa['teaserid'] ?> {
      display:none;
     }  
  <?php endforeach; ?>
</style>
0 голосов
/ 10 августа 2011

Нет необходимости, чтобы PHP распечатывал новый блок CSS и Javascript для каждого элемента. Если вы напишите css и javascript - это хороший способ, то все будет обработано за вас.

Еще одна вещь, которую нужно иметь в виду, заключается в том, что PHP является основным языком шаблонов, поэтому, если вы обнаруживаете, что повторяете большие куски кода, вы, вероятно, ошибаетесь. Вместо этого как то так:

<?php
$variable = "SOme value";
echo "Some very long huge string with <html> tags and stuff plus $variables";
?>

Вы можете сделать что-то подобное, открывая и закрывая теги несколько раз.

<?php $variable = "SOme value"; ?>
Some very long huge string with <html> tags and stuff plus <?php print $variables; ?>

С этим, вот переработанная версия вашего кода. Кроме того, вместо того, чтобы создавать выходной PHP-файл с пользовательским Javascript с жестко запрограммированными идентификаторами, вам действительно нужно структурировать свой Javascript так, чтобы он вообще не нуждался в ЛЮБОМ из этого, как я сделал. *

<style type='text/css'>
/* The CSS is the same, so just have one class that is used on all the items. */
.empresa-teaser { 
  width:100%;
  background-color: #CCC;
  color: #000;
  margin-top:10px;
  border:1px solid #CCC;
  position:relative;
  vertical-align:middle;
}
</style>

<script type="text/javascript">
  $(function(){
    // Hide all of the teasers to start.
    $(".empresa-teaser").hide();

    // Add a handler for when the show/hide link is clicked.
    $(".showhide-empresa-teaser").click(function(){

      // When it is clicked, find the next item with the 'empresa-teaser' class
      // and show it using a sliding toggle effect.
      $(this).nextAll('.empresa-teaser:first').slideToggle(500);
    });
  });
</script>


<?php foreach ($empresas as $empresa) { ?>

  <a href='#' class="showhide-empresa-teaser">
    <?php print $empresa['titulo']; ?>
  </a>
  <br />
  <div class="empresa-teaser">TEST</div>

<?php } ?>
0 голосов
/ 10 августа 2011

В PHP вы можете помещать переменные только в строки двойных кавычек:

$a = 'Jon';
echo "Hi $a"; // Should output 'Hi Jon'
echo 'Hi $a'; // should output 'Hi $a'

Так что, если вы хотите, чтобы Javascript читал:

$(".Jon") // where Jon is the value of $a

Тогда в PHP вы можете вывести его следующим образом:

echo '$(\".' . $a . '\")'; // Notice we are splitting the echo statement into a concatenation of 3 strings
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...