PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
rasl89
Отправлено: 06 Июля, 2020 - 22:16:47
Гость
Покинул форум
Сообщений всего: 104
Дата рег-ции: Март 2020
Откуда: Россия, Уфа
Помог: 1 раз(а)
Всем привет.
Есть код, который отображает все отзывы под постами, при нажатии на ПОКАЗАТЬ БОЛЬШЕ подгружает еще более ранние:
PHP:
скопировать код в буфер обмена
<?PHP
$reviews_per_page = 5 ;
'type' => 'mjob_review' ,
'post_id' => $mjob_post -> ID ,
'paginate' => 'load' ,
'order' => 'DESC' ,
'orderby' => 'date' ,
) ;
$query_args = wp_parse_args
( array ( 'number' => $reviews_per_page ,
'page' => 1
) , $total_args ) ;
// Get reviews
$review_obj = MJE_Review:: get_instance ( ) ;
$reviews = $review_obj -> fetch ( $query_args ) ;
$reviews = $reviews [ 'data' ] ;
// Get total reviews
$total_reviews = count ( get_comments
( $total_args ) ) ; // Get review pages
$review_pages = ceil ( $total_reviews / $query_args [ 'number' ] ) ; $query_args [ 'total' ] = $review_pages ;
foreach ( $reviews as $key => $value ) {
$review_data [ ] = $value ;
?>
<li id="review-<?PHP echo $value -> comment_ID ; ?> " class="review-item clearfix">
<div class="image-avatar">
<?PHP echo $value -> avatar_user ; ?>
</div>
<div class="profile-viewer">
<a href="<?PHP echo $value -> author_data -> author_url ; ?> " class="name-author">
<?PHP echo $value -> author_data -> display_name ; ?>
</a>
<p class="review-time"><?PHP echo $value -> date_ago ; ?> </p>
<div class="rate-it star" data-score="<?PHP echo $value -> et_rate ; ?> "></div>
<div class="commnet-content"><?PHP echo $value -> comment_content ; ?> </div>
</div>
</li>
<?PHP
}
endif ; ?>
</ul>
<div class="paginations-wrapper" >
<?PHP
if ( $review_pages > 1) {
ae_comments_pagination( $review_pages , $paged , $query_args ) ;
}
?>
</div>
<?PHP echo '<script type="json/data" class="review-data" > ' . json_encode ( $review_data ) . '</script>' ; ?>
Функция:
PHP:
скопировать код в буфер обмена
function ae_user_pagination
( $query_args = array ( ) , $total , $current = '' , $echo = true ) { $str_paginate = '' ;
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1 ;
if ( ! empty ( $query_args ) ) { if ( isset ( $query_args [ 'paged' ] ) ) { if ( $paged == 1) {
$paged = $query_args [ 'paged' ] ;
}
$query_args [ 'offset' ] = $total * ( $paged - 1) ;
}
$str_paginate .= '<script type="application/json" class="ae_query">' . json_encode ( $query_args ) . '</script>' ; }
$str_paginate .= '<div class="paginations" >' ;
if ( ! isset ( $query_args [ 'paginate' ] ) || ( isset ( $query_args [ 'paginate' ] ) && $query_args [ 'paginate' ] == 'page' ) ) { $big = 999999999 ; // need an unlikely integer
$str_paginate .= paginate_links
( array ( 'base' => str_replace ( $big , '%#%' , esc_url
( get_pagenum_link
( $big ) ) ) , 'format' => '?paged=%#%' ,
'current' => max ( 1
, ( $current ) ?
$current : $paged ) , 'total' => $total ,
'next_text' => '<i class="fa fa-angle-double-right"></i>' ,
'prev_text' => '<i class="fa fa-angle-double-left"></i>' ,
) ) ;
} else {
if ( $total > $current ) {
$text = 'load more' ;
if ( ! et_load_mobile
( ) ) $text = ( isset ( $query_args [ 'text' ] ) ) ?
$query_args [ 'text' ] : __
( "Load more" , 'enginethemes' ) ; $str_paginate .= '<a id="' . $query_args [ 'type' ] . '-inview" class="inview load-more-post" >' . $text . '</a>' ;
}
}
$str_paginate .= '</div>' ;
if ( $echo )
echo $str_paginate ;
else
return $str_paginate ;
}
endif ;
Почему -то не подгружает, показывает только 5 последних, в чем может быть дело? Все в коде складно вроде бы.
rasl89
Отправлено: 13 Июля, 2020 - 23:52:03
Гость
Покинул форум
Сообщений всего: 104
Дата рег-ции: Март 2020
Откуда: Россия, Уфа
Помог: 1 раз(а)
Всем привет. Ранее прикрепил не верную функцию.
Прикладываю верную:
Спойлер (Отобразить )
PHP:
скопировать код в буфер обмена
function ae_comments_pagination
( $total , $current = '' , $query_args = array ( ) ) {
if ( ! empty ( $query_args ) ) { echo '<script type="application/json" class="ae_query">' . json_encode ( $query_args ) . '</script>' ; }
// don not use paginate or load more
if ( ! isset ( $query_args [ 'paginate' ] ) || ! $query_args [ 'paginate' ] ) return ; // render paginate
echo '<div class="paginations">' ;
if ( $query_args [ 'paginate' ] == 'page' ) { // paging
$big = 999999999 ; // need an unlikely integer
echo paginate_links
( array ( 'base' => str_replace ( $big , '%#%' , esc_url
( get_pagenum_link
( $big ) ) ) , 'format' => '?paged=%#%' ,
'current' => max ( 1
, ( $current ) ?
$current : get_query_var
( 'paged' ) ) , 'total' => $total ,
'next_text' => '<i class="fa fa-angle-double-right"></i>' ,
'prev_text' => '<i class="fa fa-angle-double-left"></i>' ,
) ) ;
} else { // load more
if ( $total > $current ) {
$text = ( isset ( $query_args [ 'text' ] ) ) ?
$query_args [ 'text' ] : '' ; if ( ! et_load_mobile( ) && ! $text ) {
$text = __( "Load more" , 'enginethemes' ) ;
}
echo '<a id="' . $query_args [ 'type' ] . '-inview" class="inview load-more-post" >' . $text . '</a>' ;
}
}
echo '</div>' ;
}
endif ;
'post_id' => $mjob_post->ID, показывает null, оно и верно раньше этот код был приспособлен для отображения комментов/отзывов только в посте, а я его хочу приспособить для отображения ВСЕХ отзывов на посты юзера
я так понимаю нужно в 'post_id' => $mjob_post->ID, поместить все id посты юзера?
Может быть в этом причина не подгрузки всех комментов при нажатии на кнопку показать все?
Кстати, если $reviews_per_page = 5; увеличивать, например сделать 6, то комментарии отображаются 6, тут все работает.
Vladimir Kheifets
Отправлено: 14 Июля, 2020 - 07:38:25
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017
Откуда: Германия, Бавария
Помог: 37 раз(а)
rasl89 пишет: Всем привет. Ранее прикрепил не верную функцию.
Прикладываю верную:
Спойлер (Отобразить )
PHP:
скопировать код в буфер обмена
function ae_comments_pagination
( $total , $current = '' , $query_args = array ( ) ) {
if ( ! empty ( $query_args ) ) { echo '<script type="application/json" class="ae_query">' . json_encode ( $query_args ) . '</script>' ; }
// don not use paginate or load more
if ( ! isset ( $query_args [ 'paginate' ] ) || ! $query_args [ 'paginate' ] ) return ; // render paginate
echo '<div class="paginations">' ;
if ( $query_args [ 'paginate' ] == 'page' ) { // paging
$big = 999999999 ; // need an unlikely integer
echo paginate_links
( array ( 'base' => str_replace ( $big , '%#%' , esc_url
( get_pagenum_link
( $big ) ) ) , 'format' => '?paged=%#%' ,
'current' => max ( 1
, ( $current ) ?
$current : get_query_var
( 'paged' ) ) , 'total' => $total ,
'next_text' => '<i class="fa fa-angle-double-right"></i>' ,
'prev_text' => '<i class="fa fa-angle-double-left"></i>' ,
) ) ;
} else { // load more
if ( $total > $current ) {
$text = ( isset ( $query_args [ 'text' ] ) ) ?
$query_args [ 'text' ] : '' ; if ( ! et_load_mobile( ) && ! $text ) {
$text = __( "Load more" , 'enginethemes' ) ;
}
echo '<a id="' . $query_args [ 'type' ] . '-inview" class="inview load-more-post" >' . $text . '</a>' ;
}
}
echo '</div>' ;
}
endif ;
'post_id' => $mjob_post->ID, показывает null, оно и верно раньше этот код был приспособлен для отображения комментов/отзывов только в посте, а я его хочу приспособить для отображения ВСЕХ отзывов на посты юзера
я так понимаю нужно в 'post_id' => $mjob_post->ID, поместить все id посты юзера?
Может быть в этом причина не подгрузки всех комментов при нажатии на кнопку показать все?
Кстати, если $reviews_per_page = 5; увеличивать, например сделать 6, то комментарии отображаются 6, тут все работает.
Добрый день!
Может быть Вам пригодится такое решение на чистом JS и РНР.
Что напишите в ForExampLoader.php, то и отобразится - комментарии, картики, видео т.е. любой HTML контент.Спойлер (Отобразить ) CODE (
html ):
скопировать код в буфер обмена
<html >
<head >
<meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" / >
<title > Untitled Document</ title >
<style >
#scroll-content > div {
background: #c0c0c0;
height: 800px;
margin-bottom: 5px;
}
</ style >
<script >
document.addEventListener("scroll", function (event) {
checkForNewDiv();
});
var item = 1;
var items = 5;
var checkForNewDiv = function () {
var lastDiv = document.querySelector("#scroll-content > div:last-child");
var lastDivOffset = lastDiv.offsetTop + lastDiv.clientHeight;
var pageOffset = window.pageYOffset + window.innerHeight;
if (pageOffset > lastDivOffset - 10 && item < items)
{
item++;
var newDiv = document.createElement("div");
newDiv.innerHTML = "test div " + item; //только для демо html
//ReqRsp("ForExampLoader.php?item="+item,"div");//подгрузка контента
document.getElementById("scroll-content").appendChild(newDiv);
checkForNewDiv();
}
};
//--------------------------------------------------------------------------
function ReqRsp(getReq,innerHTMLid){
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function()
{
if (this.readyState == 4 && this.status == 200)
{
try
{
var buf = this.responseText;
if(buf.indexOf("Parse error")>0) alert(buf);
setElementByIdPropVal(innerHTMLid, 1, buf);
}
catch (e)
{
alert(buf);
}
}
};
xmlhttp.open("GET", getReq, true);
xmlhttp.send();
}
//--------------------------------------------------------------------
function setElementByIdPropVal(id,prop,val){
if((typeof id)=="string")
el = document.getElementById(id);
else
el = id;
if(el)
{
if(prop&&val)
{
if(prop==1)
{
el.innerHTML=val;
}
else
{
el = el.style;
el.setProperty(prop, val);
}
}
else
el.value=prop;
}
}
//------------------------------------------------------------------------
checkForNewDiv();
</ script >
</ head >
<body >
<div id = "scroll-content" >
<div > test div 1</ div >
</ div >
</ body >
</ html >
Удачи!
rasl89
Отправлено: 14 Июля, 2020 - 18:30:11
Гость
Покинул форум
Сообщений всего: 104
Дата рег-ции: Март 2020
Откуда: Россия, Уфа
Помог: 1 раз(а)
Vladimir Kheifets пишет: rasl89 пишет: Всем привет. Ранее прикрепил не верную функцию.
Прикладываю верную:
Спойлер (Отобразить )
PHP:
скопировать код в буфер обмена
function ae_comments_pagination
( $total , $current = '' , $query_args = array ( ) ) {
if ( ! empty ( $query_args ) ) { echo '<script type="application/json" class="ae_query">' . json_encode ( $query_args ) . '</script>' ; }
// don not use paginate or load more
if ( ! isset ( $query_args [ 'paginate' ] ) || ! $query_args [ 'paginate' ] ) return ; // render paginate
echo '<div class="paginations">' ;
if ( $query_args [ 'paginate' ] == 'page' ) { // paging
$big = 999999999 ; // need an unlikely integer
echo paginate_links
( array ( 'base' => str_replace ( $big , '%#%' , esc_url
( get_pagenum_link
( $big ) ) ) , 'format' => '?paged=%#%' ,
'current' => max ( 1
, ( $current ) ?
$current : get_query_var
( 'paged' ) ) , 'total' => $total ,
'next_text' => '<i class="fa fa-angle-double-right"></i>' ,
'prev_text' => '<i class="fa fa-angle-double-left"></i>' ,
) ) ;
} else { // load more
if ( $total > $current ) {
$text = ( isset ( $query_args [ 'text' ] ) ) ?
$query_args [ 'text' ] : '' ; if ( ! et_load_mobile( ) && ! $text ) {
$text = __( "Load more" , 'enginethemes' ) ;
}
echo '<a id="' . $query_args [ 'type' ] . '-inview" class="inview load-more-post" >' . $text . '</a>' ;
}
}
echo '</div>' ;
}
endif ;
'post_id' => $mjob_post->ID, показывает null, оно и верно раньше этот код был приспособлен для отображения комментов/отзывов только в посте, а я его хочу приспособить для отображения ВСЕХ отзывов на посты юзера
я так понимаю нужно в 'post_id' => $mjob_post->ID, поместить все id посты юзера?
Может быть в этом причина не подгрузки всех комментов при нажатии на кнопку показать все?
Кстати, если $reviews_per_page = 5; увеличивать, например сделать 6, то комментарии отображаются 6, тут все работает.
Добрый день!
Может быть Вам пригодится такое решение на чистом JS и РНР.
Что напишите в ForExampLoader.php, то и отобразится - комментарии, картики, видео т.е. любой HTML контент.
Спойлер (Отобразить ) CODE (
html ):
скопировать код в буфер обмена
<html >
<head >
<meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" / >
<title > Untitled Document</ title >
<style >
#scroll-content > div {
background: #c0c0c0;
height: 800px;
margin-bottom: 5px;
}
</ style >
<script >
document.addEventListener("scroll", function (event) {
checkForNewDiv();
});
var item = 1;
var items = 5;
var checkForNewDiv = function () {
var lastDiv = document.querySelector("#scroll-content > div:last-child");
var lastDivOffset = lastDiv.offsetTop + lastDiv.clientHeight;
var pageOffset = window.pageYOffset + window.innerHeight;
if (pageOffset > lastDivOffset - 10 && item < items)
{
item++;
var newDiv = document.createElement("div");
newDiv.innerHTML = "test div " + item; //только для демо html
//ReqRsp("ForExampLoader.php?item="+item,"div");//подгрузка контента
document.getElementById("scroll-content").appendChild(newDiv);
checkForNewDiv();
}
};
//--------------------------------------------------------------------------
function ReqRsp(getReq,innerHTMLid){
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function()
{
if (this.readyState == 4 && this.status == 200)
{
try
{
var buf = this.responseText;
if(buf.indexOf("Parse error")>0) alert(buf);
setElementByIdPropVal(innerHTMLid, 1, buf);
}
catch (e)
{
alert(buf);
}
}
};
xmlhttp.open("GET", getReq, true);
xmlhttp.send();
}
//--------------------------------------------------------------------
function setElementByIdPropVal(id,prop,val){
if((typeof id)=="string")
el = document.getElementById(id);
else
el = id;
if(el)
{
if(prop&&val)
{
if(prop==1)
{
el.innerHTML=val;
}
else
{
el = el.style;
el.setProperty(prop, val);
}
}
else
el.value=prop;
}
}
//------------------------------------------------------------------------
checkForNewDiv();
</ script >
</ head >
<body >
<div id = "scroll-content" >
<div > test div 1</ div >
</ div >
</ body >
</ html >
Удачи!
Спасибо большое! Протестю!
А если все-таки рассматривать мой код:
PHP:
скопировать код в буфер обмена
$reviews_per_page = 5 ;
'type' => 'mjob_review' ,
'post_id' => $mjob_post -> ID ,
'paginate' => 'load' ,
'order' => 'DESC' ,
'orderby' => 'date' ,
) ;
$query_args = wp_parse_args
( array ( 'number' => $reviews_per_page ,
'page' => 1
) , $total_args ) ;
// Get reviews
$review_obj = MJE_Review:: get_instance ( ) ;
$reviews = $review_obj -> fetch ( $query_args ) ;
$reviews = $reviews [ 'data' ] ;
// Get total reviews
$total_reviews = count ( get_comments
( $total_args ) ) ; // Get review pages
$review_pages = ceil ( $total_reviews / $query_args [ 'number' ] ) ; $query_args [ 'total' ] = $review_pages ;
foreach ( $reviews as $key => $value ) {
$review_data [ ] = $value ;
предположим комменты не подгружкаются из-за того что post_id' => $mjob_post->ID , null
тогда туда нужно поместить все ID постов пользователя, значит 'post_id' => $mjob_post->ID, это должен быть некий массив, как его собрать и как перебрать потом? foreach?
rasl89
Отправлено: 24 Июля, 2020 - 07:43:35
Гость
Покинул форум
Сообщений всего: 104
Дата рег-ции: Март 2020
Откуда: Россия, Уфа
Помог: 1 раз(а)
Коллеги, есть класс отвечающий за подгрузку, может быть это поможет разъяснить проблему:
PHP:
скопировать код в буфер обмена
public function fetch_reviews( ) {
$request = $_REQUEST ;
$page = $request [ 'page' ] ;
$query_args = $request [ 'query' ] ;
$query_args [ 'page' ] = $page ;
$review_obj = MJE_Review:: get_instance ( ) ;
$reviews = $review_obj -> fetch ( $query_args ) ;
$reviews = $reviews [ 'data' ] ;
'success' => true ,
'data' => $reviews ,
'max_num_pages' => $query_args [ 'total' ]
) ) ;
} else {
'success' => false
) ) ;
}
}
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB