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


Bassin masculin (7 parties)

Article n° : 3BS-1013282

Fonction et Applications

Ce modèle en 7 parties du bassin masculin montre avec précision comment les os, les ligaments, les vaisseaux et les nerfs, ainsi que les muscles du plancher pelvien et les organes sexuels externes sont reliés entre eux. Il montre le bassin entier, à travers lequel une section médiane a été placée. Le côté droit du sphincter anal externe, le M. ischiocavernosus, le M. transversus perinei profundus et superficialis et le M. bulbospongiosus peuvent être enlevés ensemble.le rectum, la vessie, la prostate et le pénis peuvent également être enlevés, et séparés en deux moitiés au niveau médian - partiellement connectés. Les structures osseuses sont reliées par des aimants et peuvent donc être facilement démontées. La peau et l'aponévrose du pénis ont été partiellement retirées afin que les vaisseaux et les nerfs soient visibles. Une partie de la peau dans la zone du scrotum et du cordon spermatique a également été enlevée. Les testicules et l'épididyme sont également visibles. Sur la gauche, le cordon spermatique a été ouvert en plusieurs couches, et sur la droite, le M. cremaster et le fascia spermatica interna ont été exposés.La moitié droite du pelvis montre des sections des artères iliaques communes, externes et internes et des veines iliaques communes et externes, démontrant leurs positions les unes par rapport aux autres. Le Plexus sacral, le N. ischiadicus, le N. pudendus, le N. dorsalis penis, les Nn. scrotales anteriores, les Nn. perineales et les Nn. annales inferiores ainsi que le Ductus deferens sont représentés. Le modèle montre les os et ligaments suivants : les deux os de la hanche, la symphyse pubienne, le sacrum et le coccyx ainsi que la cinquième vertèbre lombaire avec le disque intervertébral. Une section médiane a été placée à travers la cinquième vertèbre lombaire, le sacrum et le coccyx, de sorte que le bassin peut être divisé en deux moitiés. Cela signifie qu'une partie de la cauda equina est également visible dans le canal vertébral. La moitié gauche de la cinquième vertèbre lombaire peut être enlevée. Les structures ligamentaires suivantes du bassin sont représentées

  • Lig. inguinale
  • Lig. sacrotubéral
  • Lig. sacrospinale
  • Lig. sacroiliaca anteriora
  • Lig. iliolumbale
  • Lig. longitudinale anterius
  • Lig. Supraspinale, Lig. sacroiliacum interosseum
  • Lig. sacroiliacum posterius
  • Lig. sacrococcygeum laterale
  • Lig. sacrococcygeum posterius superficiale et profundum
  • Membrane obturatrice
  • Lig. lacunaire


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