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-2500

Fonction et Applications

2500 Histologie des Mammifères, Coffret supplémentaire. Complément à l'ensemble n° 2400 - 50 lames de microscope - 1. épithélium colonnaire de mammifère 2. Epithélium cilié de mammifère 3. Tissu fibreux blanc, c.l. du tendon de la vache 4. Tissu muqueux, c.t. du cordon ombilical 5. Cartilage élastique, c.t. coloré pour les fibres élastiques 6. Développement osseux, c.l. du doigt du fœtus 7. Muscle strié du chat, c.t. 8. Muscle cardiaque du chat, c.l. et c.t. 9. Moelle osseuse rouge de vache, c.t. ou frottis 10. Cœur de souris, c.l. sagittale 11. Trachée d'un lapin, c.t. 12. Rate de chat, c.t. 13. Glande lymphatique de chat ou de lapin, c.t. 14. Glandes surrénales du lapin, c.t. 15. Épiphyse (corps pinéal) de vache ou de porc, c.t. 16. Hypophyse (corps pituitaire) de vache ou de porc, c.l. 17. Glande thyroïde de vache, c.t. 18. Thymus de vache, c.t. avec corps de Hassall 19. Glande parotide de chat, c.t. 20. Dent, c.t. par la racine ou la couronne 21. Œsophage de lapin, c.t. 22. Appendice vermiforme du lapin, c.t. 23. Gros intestin (côlon) de lapin, c.t. 24. Vésicule biliaire du lapin, c.t. 25. Rein, c.t., vital coloré au bleu trypan montrant le stockage 26. Uretère de lapin, c.t. 27. Vessie urinaire de lapin, c.t. 28. Ovaire avec corpus luteum, c.t. 29. Trompe de Fallope de porc, c.t. 30. Utérus de lapin, c.t. 31. Placenta de lapin, c.t. 32. Utérus de rat, contenant un embryon, c.t. 33. Vagin de lapin, c.t. 34. Épididyme de lapin, c.t. 35. Frottis de sperme de taureau 36. Pénis de lapin, c.t. 37. Prostate de porc, c.t. 38. Cerveau de souris, organe entier, c.l. 39. Cervelet, c.t., coloration argentée pour les cellules de Purkinje 40. Ganglion sympathique, c.t. cellules nerveuses multipolaires 41. Nerf périphérique de chat ou de lapin, c.l. 42. Œil de chat, partie antérieure avec cornée, c.t. 43. Œil de chat, partie postérieure avec rétine, c.t. 44. Cochlée (oreille interne) du cochon d'Inde, c.l. montre l'organe de Corti 45. Région olfactive du chien ou du lapin, c.t. 46. Papilles gustatives dans la langue du lapin (Papilla foliata), c.t. 47. Peau de la paume de la main humaine, c.t. 48. Cuir chevelu humain, c.t. de follicules pileux 49. Développement des ongles d'un embryon, c.l. sagittale 50. Glande mammaire de vache, 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