Hier der vollständige Code. Geändert ist nur resolveItemUrl(), dazu kommt die neue Hilfsfunktion languagePrefix(). Die Sprache wird aus dem URL-Präfix der Druckseite übernommen, z. B. /es/. html
(function () { function textOf(el) { return (el && el.textContent || "").replace(/\s+/g, " ").trim(); } // Sprachpräfix der aktuellen Seite ermitteln, z. B. "/es" bei /es/druckseite?item=123 // Standardsprache (ohne Präfix) liefert "". function languagePrefix() { var m = window.location.pathname.match(/^\/([a-z]{2})(?=\/|$)/i); return m ? "/" + m[1].toLowerCase() : ""; } function resolveItemUrl() { var match = window.location.search.match(/[?&]item=(\d+)/); if (!match) { return null; } return window.location.origin + languagePrefix() + "/a-" + match[1] + "/"; } function loadAccordion() { var url = resolveItemUrl(); if (!url) { return Promise.resolve(null); } return new Promise(function (resolve, reject) { var xhr = new XMLHttpRequest(); xhr.open("GET", url, true); xhr.onload = function () { if (xhr.status < 200 || xhr.status >= 400) { reject(new Error("item page " + xhr.status)); return; } var doc = new DOMParser().parseFromString(xhr.responseText, "text/html"); resolve(doc.querySelector(".phywe-item-accordion")); }; xhr.onerror = function () { reject(new Error("item page network error")); }; xhr.send(); }); } function parseItemBlocks(scope, withQuantity) { if (!scope) { return []; } var rows = scope.querySelectorAll(".itemslist .row.itemblocks"); var items = []; for (var i = 0; i < rows.length; i++) { var cols = rows[i].children; if (!cols.length) { continue; } var nameLink = cols[0].querySelector("a"); var numberLink = cols[1] ? cols[1].querySelector("a") : null; var item = { name: textOf(nameLink || cols[0]), mappedTo: textOf(numberLink) }; if (withQuantity && cols[2]) { var qty = parseInt(textOf(cols[2]).replace(/[^\d]/g, ""), 10); item.quantity = isNaN(qty) ? textOf(cols[2]) : String(qty); } if (item.name) { items.push(item); } } return items; } function fillTable(tableId, items, withQuantity) { var table = document.getElementById(tableId); if (!table || !items.length) { return; } var tbody = table.querySelector("tbody"); for (var i = 0; i < items.length; i++) { var tr = document.createElement("tr"); var nameTd = document.createElement("td"); nameTd.style.width = "80%"; nameTd.textContent = items[i].name; tr.appendChild(nameTd); var numberTd = document.createElement("td"); numberTd.textContent = items[i].mappedTo; tr.appendChild(numberTd); if (withQuantity) { var qtyTd = document.createElement("td"); qtyTd.textContent = items[i].quantity || ""; tr.appendChild(qtyTd); } tbody.appendChild(tr); } var wrapper = table.parentElement; while (wrapper && wrapper.className.indexOf("printtablediv") === -1) { wrapper = wrapper.parentElement; } if (wrapper) { wrapper.style.display = ""; } } function stepTitle(stepEl) { if (!stepEl) { return ""; } var titleEl = stepEl.querySelector(".card-header button div") || stepEl.querySelector(".card-header button"); return textOf(titleEl); } function setHeadline(tableId, title) { var headline = document.querySelector("#" + tableId + " .printtableheadline"); if (headline && title) { headline.textContent = title; } } function parseMedia(scope) { if (!scope) { return []; } var rows = scope.querySelectorAll(".itemslist .row.itemblocks"); var items = []; for (var i = 0; i < rows.length; i++) { var cols = rows[i].children; if (!cols.length) { continue; } var nameLink = cols[0].querySelector("a"); var fileLink = cols[1] ? cols[1].querySelector("a") : null; var item = { name: textOf(nameLink || cols[0]), mappedTo: textOf(fileLink || cols[1]), quantity: cols[2] ? textOf(cols[2]) : "" }; if (item.name) { items.push(item); } } return items; } function fillFromAccordion(accordion) { if (!accordion) { return; } var versucheStep = accordion.querySelector('[data-step="versuche"]'); var versuche = parseItemBlocks(versucheStep, false); setHeadline("print-versuche", stepTitle(versucheStep)); fillTable("print-versuche", versuche, false); var lieferumfangStep = accordion.querySelector('[data-step="lieferumfang"]'); var lieferumfang = parseItemBlocks(lieferumfangStep, true); fillTable("print-lieferumfang", lieferumfang, true); var zubehoer = accordion.querySelector('[data-step="zubehoer"]'); var sections = zubehoer ? zubehoer.querySelectorAll(".card-body") : []; var notwendig = []; var empfohlen = []; for (var i = 0; i < sections.length; i++) { var items = parseItemBlocks(sections[i], false); if (sections[i].querySelector(".text-red, .icon-warning-black")) { notwendig = items; } else if (sections[i].querySelector(".text-green, .icon-Mehrwert_black")) { empfohlen = items; } } fillTable("print-zubehoer-notwendig", notwendig, false); fillTable("print-zubehoer-empfohlen", empfohlen, false); var mediaStep = accordion.querySelector('[data-step="media"]'); var media = parseMedia(mediaStep); setHeadline("print-media", stepTitle(mediaStep)); fillTable("print-media", media, true); } function start() { var itemUrl = resolveItemUrl(); if (!itemUrl) { setTimeout(function () { window.print(); }, 2000); return; } loadAccordion() .then(function (accordion) { fillFromAccordion(accordion); }) .catch(function (err) { if (window.console && console.warn) { console.warn("Accordion konnte nicht geladen werden:", itemUrl, err); } }) .then(function () { setTimeout(function () { window.print(); }, 500); }); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", start); } else { start(); } })();
 

Données techniques


Article n° : LIE-2900

Fonction et Applications

2900 Phanerogamae, série supplémentaire. - Complément à la série n° 2800. - 50 lames de microscope - 1. apex de la tige et tissu méristématique, Asparagus c.l. 2. grains d'aleurone, c.t. de l'endosperme de Ricinus 3. Graisse dans l'endosperme de Corylus, c.t. 4. Glandes oléagineuses lysogènes, c.t., écorce de Citrus 5. Cristaux d'inuline, c.t. du tubercule de Dahlia 6. Cristaux d'oxalate de calcium, c.t. de coque sèche d'oignon 7. Cellules de bois, macérées 8. Vaisseaux lactifères, tige d'Euphorbia (euphorbe), c.l. 9. Chloroplastes dans une feuille d'Elodea, s.e. 10. Poils de feuille ramifiés, isolés de Verbascum (molène) 11. Cellulose de réserve, c.t. de la graine de Phoenix (dattier) 12. Rheum, rhubarbe, racine avec cristaux, c.t. 13. Dendrobium, orchidée, racine aérienne avec velamen, c.t. 14. Pinus, pin, racine ligneuse plus ancienne, c.t. 15. Smilax, racine avec endoderme épaissi, c.t. 16. Lupinus, lupin, nodules racinaires avec bactéries fixant l'azote, c.t. 17. Quercus, chêne, racine ligneuse plus ancienne, c.t. 18. Daucus, carotte, racine de stockage, c.t. 19. Pinus, pin, tige ligneuse plus ancienne, c.t. 20. Zea mays, maïs, tige avec faisceaux, c.l. 21. Elodea, herbe à eau, tige aquatique avec faisceau primitif, c.t. 22. Juncus, scirpe, tige avec cellules stellaires, c.t. 23. Pelargonium, géranium, jeune tige d'une plante annuelle, c.t. 24. Tilia, tilleul, tige ligneuse plus ancienne, c.t. et c.l. 25. Acorus calamus, drapeau rouge, rhizome, c.t. 26. Pinus, pin, trois sections de bois 27. Fagus, hêtre, trois sections de bois 28. Bryonia, tige avec plaques criblées, c.t. 29. Ribes, groseille, tige avec phellogène, c.t. 30. Helianthus, tournesol, tige typique de dicotylédone, c.t. 31. Salvia, sauge, tige carrée avec collenchyme, c.t. 32. Nymphaea, nénuphar, feuille flottante, c.t. 33. Dionaea, piège à mouche de Vénus, feuille avec glandes digestives, c.t. 34. Fagus, hêtre, feuilles de soleil et d'ombre sur une diapositive, c.t. 35. Pinguicula, grassette, feuille avec poils glandulaires, c.t. 36. Nerium, laurier-rose, feuille xéromorphe avec stomates enfoncés, c.t. 37. Drosera, rossolis, feuille avec poils glandulaires s.e. 38. Urtica, ortie, feuille avec poils urticants 39. Utricularia, utriculaire, vessie, s.e. 40. Pinus, pin, cône mâle avec pollen, c.l. 41. Pinus, jeune cône femelle avec ovules, c.l. 42. Pinus, ovule avec archégones, c.l. 43. Pinus, embryon mature avec endosperme, c.t. 44. Pinus, grains de pollen avec ailes, s.e. 45. Lilium, lys, jeunes anthères montrant la méiose des cellules mères du pollen 46. Tulipa, tulipe, ovaire c.t. montrant la disposition des ovules 47. Taraxacum, pissenlit, fleur composite, c.l. 48. Papaver, pavot, fleur c.t. montrant le diagramme floral 49. Phaseolus, haricot, gousse montrant le péricarpe et la graine, c.t. 50. Lycopersicum, tomate, jeune fruit, c

.t

Les microdiapositives sont fournies dans une boîte à diapositives.

PHYWE Systeme GmbH & Co. KG
Robert-Bosch-Breite 10 – 37079 Göttingen – Deutschland
www.phywe.com
Contact