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(); } })();
 

Datos técnicos


Histología humana, parte I, 50 preparados

Nº de artículo LIE-71000

Funciones y uso

71000 Histología humana, juego grande Parte I. - 50 preparaciones microscópicas - 1. Epitelio escamoso aislado, humano 2. Tejido conectivo, humano, sec. Tejido conectivo, humano, sec. 3. 3. Epitelio columnar, vesícula biliar humana, c.t. 4. Epitelio ciliado, tráquea humana, c.t. 5. Músculos lisos, humanos, c.l. y c.t. 6. Músculos estriados, humanos, c.l. 7. Músculos cardíacos, humanos, c.l. y c.t. 8. Cartílago hialino, humano, c.t. 9. 9. Cartílago elástico de la epiglotis, humano, c.t. Hueso, sustancia compacta, humano, c.t. 11. 11. Tejido fibroso blanco (tendón), humano, c.t. 12. Médula ósea roja, humana, c.t. 13. Cuero cabelludo, humano, c.l. de los folículos pilosos Arteria, humano, c.t. 15. 15. Vena, humano, c.t. 16. Frotis de sangre, humano, tinción de Giemsa Pulmón, humano, c.t. 18. 18. Laringe de feto humano, c.t. 19. Glándula linfática humana, c.t. 20. Glándula tiroidea, humana, c.t. 21. Glándula pituitaria, humana, c.t. 21. Glándula pituitaria humana, c.t. 22. Bazo, humano, c.t. 23. Lengua, humano, c.t. 23. Lengua, humano, c.t. 24. Esófago, humano, c.t. 24. Esófago, humano, c.t. 25. Glándula sublingual, humano, c.t. 26. Estómago, región pilórica, humano, c.t. 27. Páncreas, humano, c.t. 27. Páncreas, humano, c.t. 28. Páncreas, humano, c.t. 28. Intestino delgado humano, c.t. 29. Intestino grueso humano, c.t. 29. Intestino grueso, humano, c.t. 30. Hígado, humano, c.t. Hígado, humano, c.t. 31. 31. Riñón humano, c.t. 32. Glándula suprarrenal humana, c.t. 32. Glándula suprarrenal, humano, c.t. 33. Uréter, humano, c.t. 33. Uréter, humano, c.t. 34. Vejiga urinaria, humano, c.t. 35. Ovario, humano, c.t. 35. Ovario, humano, c.t. 36. Útero, humano, c.t. 37. Tubo uterino, humano, c.t. Tubo uterino, humano, c.t. 38. Placenta, humana, c.t. 39. Cordón umbilical, humano, c.t. Cordón umbilical, humano, c.t. 40. 40. Glándula mamaria, humana, c.t. 41. 41. Testículo, humano, c.t. 42. Epidídimo, humano, c.t. 42. Epidídimo, humano, c.t. 43. Epitelio olfativo, humano, c.t. Epitelio olfativo, humano, c.t. 44. Retina, humana, c.t. 45. 45. Oído interno del feto humano, c.t. 46. Corpúsculos táctiles de la piel humana, c.t. Nervio, humano, c.t. 48. 48. Médula espinal humana, c.t. 49. Cerebelo, humano, c.t.

Cerebro,

corteza

, humano, c.t

Los microportaobjetos se suministran en una caja de portaobjetos.

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