Poredati divove po atributima koji su unutar elemenata dotičnog DIVa

Dakle imam recimo ovakvu situaciju:

<div class="wrap">
       <div atribute="1">atribut 1</div>
       <div>xyz</div>
</div>
<div class="wrap">
       <div atribute="2">atribut 2</div>
       <div>xyz</div>
</div>
<div class="wrap">
       <div atribute="3">atribut 3</div>
       <div>xyz</div>
</div>
<div class="wrap">
       <div atribute="1">atribut 1</div>
       <div>xyz</div>
</div>
<div class="wrap">
       <div atribute="2">atribut 2</div>
       <div>xyz</div>
</div>

E sada trebao bi to presložiti da su divovi wrap koji su dio loopa, poredani tako da budu atributi isti jedan do drugog.

Naime ovo gore daje sada:
atribut 1
atribut 2
atribut 3
atribut 1
atribut 2

Meni treba:
atribut 1 - kako neki naslov da slijede svi atributi 1

  • atribut 1
  • atribut 1

atribut 2 - kako neki naslov da slijede svi atributi 2

  • atribut 2
  • atribut 2

atribut 3 - kako neki naslov da slijede svi atributi 3

  • atribut 3

Dakle da budu grupirani.

Radi se naime o jednom WOO dodatku, koji ima negdje taj loop ali kategorizirati te neke stavke po segmentima, mi je malo problem, možda nekome drugome ne no mislio sam da možda ih nekako samo dohvatim sa JS ili nešto da se preslože da ne petljam po dodatku, koji možda bi i išao sa nekim hook-om ali bolje da provjerim ovo.

Ako netko može složiti neka kaže i cijenu ako treba.
Dakle stvar je da element po kojim bi se preslagivalo je unutar diva koji treba presložiti.

Ja bih pitao chatgpt da mi to riješi u par minuta. Samo mu treba dobro objasniti što ti treba. To za njega nije problem.

2 Likeova

Evo ja sam kopirao ovo …mislim…tvoj tekst :


I chatgpt mi i je dao ovakav rezultat:

<!DOCTYPE html>
<html>
<head>
	<title>Rearrange wrap divs</title>
</head>
<body>
	<div class="wrap">
	       <div atribute="1">atribut 1</div>
	       <div>xyz</div>
	</div>
	<div class="wrap">
	       <div atribute="2">atribut 2</div>
	       <div>xyz</div>
	</div>
	<div class="wrap">
	       <div atribute="3">atribut 3</div>
	       <div>xyz</div>
	</div>
	<div class="wrap">
	       <div atribute="1">atribut 1</div>
	       <div>xyz</div>
	</div>
	<div class="wrap">
	       <div atribute="2">atribut 2</div>
	       <div>xyz</div>
	</div>

	<script>
		const wrapDivs = document.querySelectorAll('.wrap');
		const wrapGroups = {};

		// group wrap divs by attribute
		wrapDivs.forEach(wrap => {
			const attribute = wrap.querySelector('div').getAttribute('atribute');
			if (!wrapGroups[attribute]) {
				wrapGroups[attribute] = [];
			}
			wrapGroups[attribute].push(wrap);
		});

		// clear the body and add wrap divs in order
		document.body.innerHTML = '';
		Object.keys(wrapGroups).forEach(attribute => {
			const title = document.createElement('h2');
			title.textContent = `Attribute ${attribute}`;
			document.body.appendChild(title);
			wrapGroups[attribute].forEach(wrap => {
				document.body.appendChild(wrap);
			});
		});
	</script>
</body>
</html>

This code groups the wrap divs by attribute using an object called wrapGroups , which has keys for each attribute and values that are arrays of the wrap divs. It then clears the body of the HTML and appends the wrap divs in order of their attributes, with a title for each group.

Ako je uspelo ok a ako nije sorry :face_with_diagonal_mouth: Barem smo obojica pokušali pomoći :smile:

Uspio sam dobiti da stavim classu na matični wrap dio, pa onda mogu direknto njih.
Ma ne pitaj rastavljam naplatni WOO commerce dodatak da radi nešto što bi bilo skroz logično da ima.

No eto opet pješice.

HVALA budem probao jer i prošli put sam nešto tako netko je javio isto njegov odogovor.

Postavim ovdje riješenje.
TNX :+1:

1 Like

Radim sada sa CHATom mozgam, bude nešto skroz za loopom. Vratio mi odgovor skoro 80% gotovo.
Samo moram urediiti, tako da sredim cijeli loop sa hookom iz moje functions datoteke.
Bolesno.

1 Like

Hehehe :smile: svašta on može da izmozga chapta

A u k…

function wc_pb_template_bundled_item_details_wrapper_open( $bundled_item, $bundle ) {

$layout = $bundle->get_layout();

if ( ! in_array( $layout, array( 'default', 'tabular', 'grid' ) ) ) {
	return;
}

if ( 'default' === $layout ) {
	$el = 'div';
} elseif ( 'tabular' === $layout ) {
	$el = 'tr';
} elseif ( 'grid' === $layout ) {
	$el = 'li';
}

$classes = $bundled_item->get_classes( false );
$style   = $bundled_item->is_visible() ? '' : ' style="display:none;"';

if ( 'grid' === $layout && $bundled_item->is_visible() ) {
	// Get class of item in the grid.
	$classes[] = WC_PB()->display->get_grid_layout_class( $bundled_item );
	// Increment counter.
	WC_PB()->display->incr_grid_layout_pos( $bundled_item );
}

/*$stuff=$bundled_item->product->get_category_ids();
$idTemp = $stuff[0];*/


echo '<' . $el . ' class="' . implode( ' ' , $classes ) . '"' . $style . '>';

}

Trebam se spojit na funkciju i dodati još jedan parametar u echo.
Probam unutar plugina, sve radi.

Napravim hook do te funkcije ne radi.

kako da dodam još jedan parametar preko function.php datoteke.

Probao sam prebrisati cijelu funckiju, sa:
add_action( ‘wc_pb_template_bundled_item_details_wrapper_open’, ‘my_custom_function3’, 999, 2 );
function my_custom_function3( $bundled_item, $bundle ) {
$layout = $bundle->get_layout();

if ( ! in_array( $layout, array( 'default', 'tabular', 'grid' ) ) ) {
	return;
}

if ( 'default' === $layout ) {
	$el = 'div';
} elseif ( 'tabular' === $layout ) {
	$el = 'tr';
} elseif ( 'grid' === $layout ) {
	$el = 'li';
}

$classes = $bundled_item->get_classes( false );
$style   = $bundled_item->is_visible() ? '' : ' style="display:none;"';

if ( 'grid' === $layout && $bundled_item->is_visible() ) {
	// Get class of item in the grid.
	$classes[] = WC_PB()->display->get_grid_layout_class( $bundled_item );
	// Increment counter.
	WC_PB()->display->incr_grid_layout_pos( $bundled_item );
}

$stuff=$bundled_item->product->get_category_ids();
$idTemp = $stuff[0];


echo '<' . $el . ' class="' . implode( ' ' , $classes ) . '"' . $style . ' data="'.$idTemp.'">';

}

no ne radi. A kada direktno na funckiji probam unutar dokumenta samog plugina, tamo sve radi.
Moram to nekako izvući van jer to bi mi riješilo sve.

Radi o nekom pluginum jel? Products Bundle? Pogledaj u pluginu kako se poziva funkcija wc_pb_template_bundled_item_details_wrapper_open, ako se poziva preko actiona, onda kod sebe staviš prvo na remove action funkcija od plugina, pa add action svoju funkciju u koju kopiraš kod funkcije iz plugina i napraviš svoje izmjene. Probaj to. Jedino je pitanje na kako i gdje ćeš to sve napraviti, koji hook itd, google-aj remove action, add action i slično.

Ta funkcija ni sa remo action ne ide, pa da stavim svoju.

Drugo probao sam i njihov copy templejt u svoju temu. I tamo isto im ne radi. Napravim izmijene no ništa.
Poslao sam im upit.

Mislim sve što trebam napravim sa 10 linija koda, unutar plugina i radi što želim. No to ne može tako.

Probam sa templejt svoj u temu child, ništa, probam sa akcijama, filterima, pola hvata pola ne.

Ili nešto opeko fulam, ili tu nešto ne štima,

Sve ti to ovisi o tome kako su developeri plugina napravili, odnosno da li će tebi ili bilo kome dozvoliti override. Ili će te natjerati da ih kontaktiraš za feature i onda ti to naplatiti.

Skinuo novu verziju plugina i sve radi.

Imam pristup foreach petlji koja generira svaki proizvod/div za sebe.
Te radi preko templejta unutar child teme pozvana.
I čita kategoriju proizvoda.

Sada samo da uredim foreach petlju da bude:
naziv kategorije
artikli
naziv kategorije2
artikli
itd…