Наиболее эффективный способ преобразования вызова javascript в php (связанный с проблемой бесконечной прокрутки Wordpress/социальных кнопок)
Вступление: Я новичок как в php, так и в Javascript и пытался решить эту проблему для своего сайта (другая версия этой проблемы здесь), но у меня возникли проблемы с введением в действие ответа LocalPCGuy. (короче говоря: проблема в том, что при активированной бесконечной прокрутке социальные кнопки работают с первыми загруженными сообщениями, но не работают для сообщений, загруженных впоследствии).
Я работаю над ними на WordPress, и я добавил свои социальные кнопки в существующий php-файл, который генерирует большую часть внешнего вида каждого сообщения. Кажется, я добавляю их в нужное место, потому что кнопки появляются там, где я хочу, чтобы они были в каждом сообщении (только для первых на странице). Как и два других парня, которые писали об этой проблеме, я использую digg digg в качестве своего социального плагина.
-
В настоящее время код в php-файле, который генерирует социальные кнопки, выглядит примерно так это:
<div class="sharing-button"> <?php dd_google1_generate('Compact (20px)') ?> </div>
Как я уже сказал, это заставляет кнопку появляться для первых загруженных сообщений, но как только бесконечная прокрутка попытается загрузить дополнительные сообщения, социальная кнопка не появится на этих сообщениях.
На данный момент я попробовал следующее:
-
Добавьте код ниже чуть выше или ниже (взят из ответа здесь ) или внутри моего
<div>
, содержащего кнопки в файле php.if (typeof gapi !== "undefined") { gapi.plusone.go(); }
-
Это не сработало, я решил, что это потому, что файлу .php потребуется какой-то сигнал, чтобы знать, что ему нужно выполнить операцию javascript. Поэтому я огляделся и нашел пару предложений о том, как это сделать, здесь и здесь. Ни в том, ни в другом случае мне не удалось заставить кнопки отображаться соответствующим образом. Ниже было то, что казалось наименее идиотской из этих попыток:
<?php echo '<script type="text/javascript"> if (typeof gapi !== "undefined") { gapi.plusone.go(); }'; echo '</script>'; ?>
Я также подумал, что, возможно, мне нужно передать аргумент в
gapi.plusone.go()
, и я попытался передать свою кнопку обмена<div>
выше, но это тоже не сработало (php-код внутри скрипта javascript внутри блока php... не возлагал больших надежд).
На данный момент я не уверен, что делать - я чувствую, что решение, вероятно, довольно простое, но я полностью застрял, потратив часы на чтение тем об интеграции javascript в php и тому подобном.
У кого-нибудь есть идея, как я могу применить это решение Javascript к моей зависящей от php теме Wordpress?
Большое, большое спасибо!
2 answers
Краткий ответ: это невозможно.
Длинный ответ: ПЕРВЫМ идет PHP, ВТОРЫМ - javascript. "Программа" PHP запускается на Сервере, который является сервером вашего веб-провайдера. Этот сервер обрабатывает все PHP-файлы. После завершения этой работы файлы веб-сайта будут отправлены на ваш компьютер. Он содержит, среди прочего, javascript.
И этот javascript запускается только на ВАШЕМ компьютере, на котором вы смотрите. Как только ваш браузер загрузит страницу и начнет работать javscript, уже слишком поздно запрашивать у Сервера дополнительную информацию.
Существуют методы, позволяющие это (ключевое слово AJAX), но это другой вопрос:-)
Вам нужно запустить javascript кнопок, чтобы они работали, так как бесконечная прокрутка загружает следующий набор сообщений с помощью ajax. Один пример, который я нашел, но он делает это только для facebook, если плагин использует FBML:
$(document).ajaxComplete(function(){
try{
FB.XFBML.parse();
}catch(ex){}
});
Я использую пользовательскую реализацию, например, Box из facebook и infinite scroll, и это работает просто отлично.