Поиск на сайте и Masonry - PHP, JAVASCRIPT
Помогите, пожалуйста! Не могу разобраться почему при поиске на сайте Masonry не работает; хотя данные, которые были вбиты в поиске выводит. Если же поиск не использовать, то Masonry работает:
1.php <form name="search" method="post" action="search.php" class="search"> <input type="search" name="query" placeholder="Поиск" class="input"> <button type="submit" class="ax">Найти</button> </form> search.php <!DOCTYPE html> <HTML> <head> <title> </title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script src="/js/masonry.pkgd.min.js"></script> <?php include("bd/Ho_bd.php"); ?> </head> <body> <?php define('DB_HOST', 'localhost'); define('DB_USER', 'WOW'); define('DB_PASS', ''); define('DB_NAME', 'WOW'); if (!mysql_connect(DB_HOST, DB_USER, DB_PASS)) { exit('Cannot connect to server'); } if (!mysql_select_db(DB_NAME)) { exit('Cannot select database'); } mysql_query('SET NAMES utf8'); function search ($query) { $query = trim($query); $query = mysql_real_escape_string($query); $query = htmlspecialchars($query); if (!empty($query)) { if (strlen($query) < 3) { $text = '<p>Слишком короткий поисковый запрос.</p>'; } else if (strlen($query) > 128) { $text = '<p>Слишком длинный поисковый запрос.</p>'; } else { $q = "SELECT * FROM Ho WHERE `images` LIKE '%$query%' OR `title` LIKE '%$query%' "; $result = mysql_query($q) or die(mysql_error()); if (mysql_affected_rows() > 0) { $row = mysql_fetch_assoc($result); $num = mysql_num_rows($result); $text = '<p>По запросу <b>'.$query.'</b> найдено совпадений: '.$num.'</p>'; while($row=mysql_fetch_array($result)) { echo ' <div id="container" class="container"> <?php $Ho = get_Ho (); foreach($Ho as $row) : ?> <div class="item"> <a href="#" class="im"><img src="'.$row['images'].'"</a> <div class="title"><a href="#" class="title">'.$row['title'].' </a></div> </div> <?php endforeach;?> </div> '; } } else { $text = '<p>По вашему запросу ничего не найдено.</p>'; } } } else { $text = '<p>Задан пустой поисковый запрос.</p>'; } return $text; } ?> <?php if (!empty($_POST['query'])) { $search_result = search ($_POST['query']); echo $search_result; } ?> <script type="text/javascript"> var container = document.querySelector('#container'); var msnry = new Masonry(container, { columnWidth: 325, itemSelector: '.item', gutter: 20 }); </script> </body> </html> Ho_bd.php <?php function db_connect() { $host = 'localhost'; $user = 'WOW'; $pswd = ''; $db = 'WOW'; $connection = mysql_connect ($host, $user, $pswd); if(!$connection || !mysql_select_db($db, $connection)) { return false; } return $connection; } function db_result_to_array($result) { $res_array = array(); $count=0; while ($row = mysql_fetch_array($result)) { $res_array[$count] = $row; $count++; } return $res_array; } function get_Ho () { db_connect(); $query = "SELECT * FROM Ho"; $result = mysql_query($query); $result = db_result_to_array($result); return $result; } ?> Понимаю, что Masonry будет работать при таком коде: <a href="#" class="im"><img src="<?= $row['images']?>" /></a> Но в echo все выводит (Masonry в нем не работает почему-то), когда код записан так: <a href="#" class="im"><img src="'.$row['images'].'"</a> Помогите, пожалуйста, чтобы Masonry тоже заработал при поиске |
Masonry наплевать результатом чего сервер вернул запрошенную страницу, он об этом даже и не знает. Для него важно, чтобы html-код под этот плагин отвечал его ожиданиям. А что
<a href="#" class="im"><img src="<?= $row['images']?>" /></a> что <a href="#" class="im"><img src="'.$row['images'].'"</a> это одно и тоже, с разницей в том, что в первом случае это вставка РНР код непосредственно в вывод HTML, а во втором случае, это вывод строкового значения конструкцией echo: echo '<a href="#" class="im"><img src="'.$row['images'].'"</a>'; поэтому и РНР код в них прописывается согласно определению. <?= $row['images']?> тоже самое, что и <?echo $row['images']?>. |
laimas,
а не подскажите ли Вы, что тогда сделать, чтобы Masonry заработал? |
Цитата:
var msnry = new Masonry(container, { .... Ваша проблема на клиентской стороне, а значит и причину ее нужно искать там. Поэтому полезнее было бы показать результирующий HTML касающийся плагина, а не РНР код, который его формирует. |
laimas,
у меня все данные выводятся в вертикальном порядке. Если же поиск не использовать, то Masonry работает. Извините, я пока еще новичок. Я как поняла Masonry из echo нужно убрать? |
Цитата:
<?php = 123; ?> <p><?=?></p> или такая <?php = 123; echo \'<p>\' . . \'</p>\'; ?> Результатом что первого, что второго кода будет одно и тоже: <p>123</p> Не важно как вы выводите, важно что выводите. Если не работает, значит есть ошибки в структуре того, что выводите. Исходный код страницы полученной после поиска проанализируйте, найдете ошибку. Это можно сделать в отладчике браузера. |
Консоль ошибок не выдает
|
Ну так ошибки есть в html-коде вашей страницы, о чем и гласит ошибка. Еще раз - анализируйте html код ответа сервера, в нем и ответ на вопрос найдете.
|
Шалун,
в вашем РНР коде та же самая ошибка, что была допущена и в этой теме. Отсюда и ваши баги. |
Часовой пояс GMT +3, время: 22:28. |