AJAX paginacija pomoć

Tražim nekoga dobrog sa ajaxom i prilagodbom koda.

Koristim jedan plugin za GRID, DIVI WOOCOMMERCE EXTENED.

Se super ali grid i ta ajax paginacija mi daje glavobolje.

Dodao sam preko functions.php kod za drop down proizvoda po stranici, te to radi s ajaxom.

Ali rekalkulacija koja se obavlja nakon svakog klika na slijedeću stranicu ne radi. Zašto?

Zato što ne mogu poslati nazad nakon klika akciji proizvoda_po_stranici varijablu nazad. Makar sam je stavio i u session, i ima na linku svakog gumba po stranicama.

Taj dio mi samo fali, i zapeo sam jer eto neznam što dalje.

Ako netko može na private mu pošaljem što je potrebno i platim naravno za trud.

Mislim da nekom znalcu dobrom sa AJAXOM i poznad mu je wordpress, ne treba puno.

Hvala

Iskreno, dosta si nejasno postavio upit…

Gdje i kako trigiraš rekulkaciju?
Nekako mi zvuči da na isti klik šalješ ajax request koji trigira rekulkaciju i koji navigira na idući page … a tu nemaš garanciju da će rekalkulacija odraditi prije nego se otvori idući page.

No nabadam, nejasan mi je upit.

Ovo npr ako mozes detaljnije pojasnit:

Tko kome nazad?
Na klijentu trigiras neku akciju i slao bi nekakav rezultat te akcije na server?

Kakve veze ima tu session i sto uopće znači zadnja rečenica … hmmm, baš mi je nejasno napisano…

Sve što trebaš pokupit javascriptom stavi u atribute nekog elementa, na success updateaj, pa otud čitaj novo stanje.

Da skroz si upravu, radim nešto sa strane klijenta ačekam promijenu na serveru:)

Zato kažem da sam zapeo.

Naime radim sa DIVIjem i eto taj plugin pokriva sve.Ali ima jedan problem.
SHOP GRID koji je najvažniji za sve to je super, ali koristi custom loop.
I imam hook te mogu snjim što god da napravim i to je super.

NO; modul nema opciju da ima išta od paginacije OSIM:

  • bez paginacije
  • sa paginacijom AJAX i fiksnim brojem po stranici.
    I ta paginacija je problem.

Naime vuče fiksnu vrijednost kod rekalklulaciuje tog FIKSNOG broja stranica.

NO ako ja njemu promijenim broj proizvoda po stranici za custom loop sa filterom on meni recimo promijeni sa DEFALTNUH 12 na 24.
Ali vrijednost 12 je zapisana i dalje, jer tu vrijednost novu od 24 moram poslati AJAX.

Tako da imam situacju da on recimo 120 proizvoda koji su na 10 stranica, promijenim na 24 po stranici, sa dropdownm koji sam napravio.
Nakon toga prebroi on stranice i ima ih 5. i to štima.

ALI kada klikaš pomak na svakoj novoj stranici, ili OFFSET koji oni koriste, ostaje 12.
Pa se zapravo pomiče za tu vrijednost.

Tako da rekalkulacija se ne događa, ne znam kako i gdje poslati tu vrijednost novu, dinamički nakon promijene na dropdown.

Session sam koristio samo zato kad refreša page na promijenu broja da zapamti što su ljudi izabrali, i da to prikazuje. Ima i URL parametar.

I sad me muči samo taj dio da vrijednost koja je recimo tog parametra pošaljem nazad da rekalklacija OFFSETA se radi sa tom virjednošću.

Ovo ti je dio funckije iz plugina koji radi to sve i tu trebam zapravo izmanipultirai dio OFFSET:

public function dwe_get_woo_products() {
		if ( ! isset( $_POST['dwe_get_woo_products_nonce'] ) || ! wp_verify_nonce( sanitize_key( wp_unslash( $_POST['dwe_get_woo_products_nonce'] ) ), 'dwe-woo-products-nonce' ) ) {
			return;
		}

		if ( ! isset( $_POST['props'] ) ) {
			return;
		}

		$defaults = array(
			'order_class' => '',
			'view_type' => 'default',
			'use_current_loop' => 'off',
			'product_layout' => 'layout1',
			'products_number' => '10',
			'offset_number' => 0,
			'products_order' => 'ASC',
			'products_order_by' => 'title',
			'hide_out_of_stock' => 'off',
			'enable_out_of_stock_label' => 'off',
			'out_of_stock_label' => esc_html__( 'Out of Stock', 'divi-woocommerce-extended' ),
			'include_categories' => '',
			'include_tags' => '',
			'taxonomies_relation' => 'OR',
			'use_masonry' => 'off',
			'enable_quickview' => 'off',
			'quickview_link_text' => esc_html__( 'Quickview', 'divi-woocommerce-extended' ),
			'quickview_link_icon' => '',
			'show_quickview_icon_only' => 'off',
			'show_thumbnail' => 'on',
			'thumbnail_size' => 'woocommerce_thumbnail',
			'show_price' => 'on',
			'show_rating' => 'off',
			'show_add_to_cart' => 'on',
			'simple_add_to_cart_text' => '',
			'variable_add_to_cart_text' => '',
			'grouped_add_to_cart_text' => '',
			'external_add_to_cart_text' => '',
			'out_of_stock_add_to_cart_text' => '',
			'show_add_to_cart_on_hover' => 'off',
			'add_to_cart_icon_desktop' => '',
			'add_to_cart_icon_tablet' => '',
			'add_to_cart_icon_phone' => '',
			'show_sale_badge' => 'on',
			'sale_badge_text' => 'label',
			'sale_label_text' => '',
			'title_level' => 'h4',
			'quickview_add_to_cart_icon_desktop' => '',
			'quickview_add_to_cart_icon_tablet' => '',
			'quickview_add_to_cart_icon_phone' => '',
			'quickview_title_level' => 'h2',
			'is_product_category' => false,
			'is_product_tag' => false,
			'is_product_taxonomy' => false,
			'is_user_logged_in' => false,
			'is_search' => false,
			'term_id' => '',
			'term_slug' => '',
			'taxonomy' => '',
			'search_query' => '',
			'page' => 1,
			'total_pages' => 1,
			'is_search' => false,
			'search_term' => '',
			'min_price' => '',
			'max_price' => '',
			'sorting' => 'off',
			'sort_orderby' => '',
			'override_wishlist_setting' => 'off',
			'display_wishlist_button' => '',
			'wishlist_button_position' => '',
			'wishlist_button_type' => '',
		);

		foreach ( $defaults as $key => $default ) {
			// phpcs:ignore ET.Sniffs.ValidatedSanitizedInput.InputNotSanitized
			${$key} = trim( sanitize_text_field( wp_unslash( et_()->array_get( $_POST['props'], $key, $default ) ) ) );
		}
		
		
		$processed_title_level  = esc_html( $title_level );
		$valid_heading_tag      = array( 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' );
		if ( ! in_array( $processed_title_level, $valid_heading_tag, true ) ) {
			$processed_title_level = esc_html( 'h4' );
		}

		$quickview_title_level  = esc_html( $quickview_title_level );
		if ( ! in_array( $quickview_title_level, $valid_heading_tag, true ) ) {
			$quickview_title_level = esc_html( 'h4' );
		}
		
		
	
		

	    $products_number = ( 0 === $products_number ) ? -1 : (int) $products_number;
	    $products_number = $product_per_page;
	    
	    
	    $page               = absint( $page );
		$offset_number      = ( $page * ( $page - 1 ) ) + $offset_number;

		

		$args = array(
			'post_type'      => 'product',
			'posts_per_page' => intval( $products_number ),
			'offset'         =>  intval( $products_number ),
			'post_status'    => 'publish',
			'orderby'        => 'date',
			'order'          => 'DESC',
		);

Dakle sada mi je puknulo da zapravo tu vrijednost koja me muči bi trebao zapisati na svaku promijenu kada se mijenja dropdown.

On ti to sprema kada sam gledao inspect, network xhr>>

…/wp-admin/admin-ajax.php
action “dwe_get_woo_products”
props[products_number] “12”

I tu vrijednost vuče iz plugina iz baze podataka koliko je postavljeno na samom modulu.

Gornji offset ako direktno stavim tipa 5 u funkciji
‘offset’ => intval( $products_number ),
‘offset’ => 24;

Onda uzima tu vrijednost. I ako je na stranici 24 komada po stranici, to radi sve super.
Dakle taj offset trebam da se vuče dinamički.
Ili točnije tu vrijednost trebam izmanipulirati kod AJAX akcije na klik.

Inače svaki link na brojevima paginacije ima parametar s ISPRAVNIM trenutnim brojem po stranici.
Možda da to iskoristim?

Tu imaš ‘offset’ => intval( $products_number ),

Ne bi li tu trebalo biti: ‘offset’ => intval( $offset_number ), ?

Dobro oko, jer samo sam kopirao jer sam tu testirao sa hardkdiranim vrijednostima da vidim što se događa.

	$args = array(
			'post_type'      => 'product',
			'posts_per_page' => intval( $products_number ),
			'offset'         => intval( $offset_number ),
			'post_status'    => 'publish',
			'orderby'        => 'date',
			'order'          => 'DESC',
		);

No ne mijenja situaciju.

Recimo ako je ovako kako je on čita iz baze podataka za tay layout vrijednost koja je u recimo ovom slučaju npr 5.

Te dodijeljuje vrijednost u ajax (iz konzole izvađeno):
props[products_number]

Što je broj stranica i onda on prema tome računa OFFSET, koji ona naravno ispada 5.

Makar sam ja sa filterom stavio na stranici da loop ide recimo na 12 i prikaže loop 12 proizvoda, no pomak proizvoda na slijedećoj stanici je i dalje 5. Ne 12.
Jer čita tu vrijednost.

Hm, ja pretpostavljam da je $page varijabla trenutna stranica na kojoj se nalaziš, 1,2,3 itd.

Pa bi, čini mi se ovo trebao prilagoditi: $offset_number = ( $page * ( $page - 1 ) ) + $offset_number;

Da ti izračuna offset, tipa $page * $product_per_page, trenutna stranica * po_stranici, pa ako je 3 * 12 to je offset 36, pa eventualno ako kasniš, dodaš još $offset_number.

Primjer:
$offset_number = $page * $product_per_page;
$offset_number = ($page * $product_per_page) + $offset_number;

Ali probaj, čini mi se da tu trebaš podesiti tu formulu. Ako je $page trenutna stranica na kojoj se nalaziš. Zakomentiraj ono prije, da ne brišeš.

Da no problem je što PRODUCT PER page se mijenja.
PAGE je uredu. On broji stranice.

No kako da izmijenju varijablu na dropdwon product per page vratim nazad kad se akcija na svaki klik odvija AJAXOM.

Pretpostavljam da je onda trebam podesitii na NOVU vrijednost kod izbora tj klika na drop down.
Dakle da ona postane ne defaultna nego izabrana. Onda bude ta formula radila.

probam nešto.

Ma iskreno priajvio sam im dosa bugova, dosta su se trudili, neke stvari ispravili neke čak prijedloge dodali u sami plugin.

Kupio sam ih dosta, isprobao i neke ne vjerujem da uopće rade kako rade.

products layout plugin, recimo da radip lijep grid, radi sve super, no pazi ovo nema opcije da staviš ga u THEME EDITOR; kao predlođak i da izabereš CURRENT CATEGORY:

DAKle recimo imaš shop koji ima 400 kategorija tko god je radio plugin nije mu palo na pamet da možda bi bilo dobro da osim izbora kategorija, staviš i “current category” opciju…

nego tipa mora bi čovjek složiti 400 predložaka.

Inače sve radim ručno, i te product loop sebi prilagođavam no ovaj je na jednom shopu koji ne bi sada rekonstruirao već samo prilagodio što mogu.

$product_per_page se ne bi smio mijenjati. Mijenja se samo $page tj. current page number, dakle 1,2,3…

Ali u principu ja ne kužim ovo s dropdownom, kod ajax bi trebao biti ili Load more button ili na scroll. I tu se opet ne mijenja $product_per_page, nego samo $page. Pa se u query prosljedjuje to sve, $page, $product_per_page i $offset što je umnožak ovo dvoje.

Ima paginaciju na gumbe broj stranica s fiksnim brojem koji dodijeliš na modulu kada radiš predložak.

Nema LOAD mora opcija.

A klijent želi da ima posjetitelj opciju 15/30/60 sve tipa drop down.
Proizvoda po stranici.

TO ovaj dodatak nema.

Ima hook na taj loop i mogu manipulirati tim brojem koji on vuče dakle dodam argument PER_PAGE.

No on ne shvaća taj argument, jer AJAX akcija i dalje čita samo onu vrijednost koja je unutar modula postavljena.

TO moram uskaditi da čita ako je posjetitelj promijenio na 30 komada sa 15, a recimo 15 je default, onda da ubacim to tako da i ajax kada se pali kuži da je sada 30 o stranici.

I onda će skripta odraditi računanje dobro prema onom što tamo postoji dakle jedino što se mijenja je ta varijabla products per page, no eto ne znam je poslati nazad da onda i ajax skuži.

banalno je zapravo 100% no vjerujem da moje znanje u tom području ne dozvoljava da skroz objasnim kako spada, pa zato tražim ako netko se kuži da mi pomogne naravno da mu platim.

Obično uvijek riješim takve stvari dam si truda, interesiraju me, no sada, sam uložio puno vremena, da sam zapostavio neke druge stavke i pomalo me to sada nervira.

Istina moram reći da taj isti dodatak, radi probleme sa bilo kojem filter za woocommerce, naplatnima, probao ih 7-8 komada UPRAVAO na tom dijelu računanja offfeseta jer naravno koriste svoj loop neki i nastaju problemi.

Aha, ako sam skužio, tebi klijent hoće da user može odabrati po stranici recimo 10,20,50,100…a plugin ima ajax, ali nema ovo, da user može odabrati po stranici.

U principu svaki filter plugin radi svoj query.

Ha, čuj, pošalji mi pp, koji plugin je to, eventualno url do site-a, ali ne moraš, mogu bacit oko, mada ako nema neki hook ili postavke, onda nisu ni radili to tako da možeš mijenjat.

A često tako kad hoćeš pluginom nešto riješiti, kao brže je, pa drek, klijent zatraži nešto, pa ispadne ili više posla ili nemoguće. Zato najbolje kad radim custom.

Ma znam, dodatak je zapravo ok, no ima nekih stavaka koje stvarno ne kužim zašto je tako, puno sam im toga prijavio, neke stvari su implementirali.

I sada sam otkrio da je glavni krivac za ovo sada i za korištenje bilo kojeg filtera ajax upravo ta paginacija nesretna i glavni loop njihov.

Rade na tome no da to poprave DIVI + taj dodatak i WOO i dobar filter i praktički pokriva sve što može trebati za neki Woo shop. No naravno eto uvijek neki zaplet.

Radim custom kad mogu , dodatke samoone koje moram. Ali eto ovdje kako sam naveo trenutno nema šanse da mijenjam išta od tih core stvari, već proširujem koliko mogu.

Ajde složim baš na nekoj kopiji pa pošaljem ti sve. Javim na PM gdje. Sumnjam da stignem danas, no eto ako riješiš javi što košta da ne bude da badave da radiš da ti platim.

Ma, ne moraš slagat kopiju, možeš na pm ovdje poslat samo o kojem je pluginu riječ. Ustvari riječ je o woo + DIVI + filter plugin, jel?