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


Thermocycleur, appareil PCR, pour 16 échantillons

Article n° : 35014-99
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> Unknown

La sensation mondiale chez PHYWE - l'ultime PCR thermal cycler miniPCR™ mini16X rend le PCR un jeu d´enfant!

Fonction et Applications
Nous livrons le sujet du prix Nobel PCR (réaction en chaîne de polymérase) dans votre salle de classe. Le Thermocycler miniPCR™ mini16X copie le matériel génétique (ADN) comme le gros équipement de laboratoire coûteux. Le miniPCR offre de l'espace pour jusqu'à 16 échantillons et est très facile à utiliser.
L'appareil est commodément contrôlé et programmé via une application gratuite sur votre smartphone ou ordinateur. L'application est compatible avec Windows, Mac, Android, iPhones ainsi que pour les iPads et est disponible dans tous les App-stores.
Le cycleur thermique peut être connecté via Bluetooth ou USB. Vous n'avez pas besoin de garder la machine connectée à votre ordinateur, tablette ou smartphone pour exécuter le programme.

Avantages
- performance d'équipements de laboratoire coûteux à bas prix.
- Jusqu'à 16 échantillons peuvent être analysés en une seule exécution.
- Opération simple avec application gratuite.
- Couvre tous les modes PCR communs : PCR de point de terminaison classique, gradients linéaires, fonction de bloc de chauffage et mode configurable entièrement gratuit.
- La chambre transparente permet une vue dans le fonctionnement interne du cycliste.
- L'utilisation facultative par Powerbank permet à l'appareil portable d'être utilisé presque n'importe où.

Caractéristiques Techniques
- Place pour 16 échantillons : 2 x 8 micro tubes de 0,2 ml (disponibles dans le commerce)
- Couvercle chauffé
- Application simple pour tous les modes PCR courants
- Opération avec des réactifs communs
- Accessoires inclus : unité d'alimentation, câble USB, couvercle de poussière
- Dimensions et poids: 5 cm x 13 cm x 10 cm, environ 500 g
- alimentation principale: 90 - 246 V, 50-60 Hz, 65 W
- Opération facultative via chargeur Li-Ion (non inclus, disponible sur demande)

Accessoires nécessaires :
- Micro-pipette 2-20 µl (47141-10)
- Micro-pipette 20-200 µl (47141-11)
- Embouts de pipettes, plastique (PP), en boîte, 2-200 'l, jaune, 96 pièces (47148-11)
- PCR tubes simples, 0,2 ml, couvercle en forme de dôme, 1000 morceaux (35928-00)
- Tubes de réaction jetable 1,5 ml, 1000 morceaux (37653-00)
- Stand pour les tubes de réaction jetables (37652-00)
- Kit d'empreintes génétiques pour PCR (35018-01)

 

 


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