{"id":66760,"date":"2026-07-15T21:02:40","date_gmt":"2026-07-15T21:02:40","guid":{"rendered":"https:\/\/www.climberbc.com\/?page_id=66760"},"modified":"2026-07-15T21:05:26","modified_gmt":"2026-07-15T21:05:26","slug":"media","status":"publish","type":"page","link":"https:\/\/www.climberbc.com\/ru\/media\/","title":{"rendered":"media"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"66760\" class=\"elementor elementor-66760\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f8dcc9a e-flex e-con-boxed e-con e-parent\" data-id=\"f8dcc9a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-19aaef6 elementor-widget elementor-widget-image\" data-id=\"19aaef6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/www.climberbc.com\/wp-content\/uploads\/elementor\/thumbs\/cropped-clm-logo-black-qwr7r2rqgu7f92004jrh0k6vlgrzl5q47ef0rmyy8c.png\" title=\"cropped-clm-logo-black.png\" alt=\"cropped-clm-logo-black.png\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fdac734 color-scheme-inherit text-left elementor-widget elementor-widget-text-editor\" data-id=\"fdac734\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>    <div id=\"bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a\" class=\"bays-mbd-wrap\"\n         data-ajax-url=\"https:\/\/www.climberbc.com\/wp-admin\/admin-ajax.php\"\n         data-nonce=\"aa935a2cae\">\n\n        <textarea class=\"bays-mbd-input\" rows=\"10\" placeholder=\"Her sat\u0131ra bir barkod yaz\"><\/textarea>\n\n        <div class=\"bays-mbd-actions\">\n            <button type=\"button\" class=\"bays-mbd-btn bays-mbd-search\">G\u00d6RSELLER\u0130 GET\u0130R<\/button>\n            <button type=\"button\" class=\"bays-mbd-btn bays-mbd-download-all\" disabled>T\u00dcM G\u00d6RSELLER\u0130 \u0130ND\u0130R<\/button>\n            <button type=\"button\" class=\"bays-mbd-btn bays-mbd-zip-all\" disabled>TOPLU ZIP \u0130ND\u0130R<\/button>\n        <\/div>\n\n        <div class=\"bays-mbd-status\" aria-live=\"polite\"><\/div>\n        <div class=\"bays-mbd-results\"><\/div>\n    <\/div>\n\n    <style>\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a.bays-mbd-wrap{\n            width:100%;\n            max-width:1400px;\n            margin:0 auto;\n            box-sizing:border-box;\n            font-family:Arial,Helvetica,sans-serif;\n        }\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a *{box-sizing:border-box}\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-input{\n            width:100%;\n            min-height:210px;\n            padding:20px;\n            border:1px solid #d8d8d8;\n            border-radius:14px;\n            background:#fff;\n            color:#222;\n            font-size:18px;\n            line-height:1.55;\n            resize:vertical;\n            outline:none;\n        }\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-input:focus{\n            border-color:#111;\n            box-shadow:0 0 0 2px rgba(0,0,0,.06);\n        }\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-actions{\n            display:flex;\n            flex-wrap:wrap;\n            gap:12px;\n            margin:16px 0 28px;\n        }\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-btn{\n            min-height:48px;\n            padding:0 22px;\n            border:0;\n            border-radius:10px;\n            color:#fff;\n            background:#050505;\n            font-weight:700;\n            font-size:14px;\n            cursor:pointer;\n            transition:.2s ease;\n        }\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-btn:hover{transform:translateY(-1px);opacity:.9}\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-btn:disabled{opacity:.45;cursor:not-allowed;transform:none}\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-download-all{background:#2f67ea}\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-zip-all{background:#09966e}\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-status{\n            display:none;\n            margin:0 0 18px;\n            padding:14px 16px;\n            border-radius:10px;\n            background:#f4f4f4;\n            color:#222;\n        }\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-status.is-visible{display:block}\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-status.is-error{background:#fff1f1;color:#a40000}\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-card{\n            margin:0 0 28px;\n            padding:22px;\n            border:1px solid #ddd;\n            border-radius:18px;\n            background:#fff;\n        }\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-card-head{\n            display:flex;\n            align-items:center;\n            justify-content:space-between;\n            gap:18px;\n            margin-bottom:22px;\n        }\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-title{\n            margin:0;\n            font-size:23px;\n            line-height:1.3;\n            font-weight:700;\n            color:#242424;\n            overflow-wrap:anywhere;\n        }\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-zip-one{\n            flex:0 0 auto;\n            background:#111;\n            font-size:15px;\n            font-weight:500;\n        }\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-grid{\n            display:grid;\n            grid-template-columns:repeat(auto-fill,minmax(210px,1fr));\n            gap:16px;\n        }\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-image-card{\n            padding:12px;\n            border:1px solid #e2e2e2;\n            border-radius:14px;\n            background:#fafafa;\n        }\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-image-link{\n            display:block;\n            width:100%;\n            aspect-ratio:1\/1.15;\n            border:1px solid #ddd;\n            border-radius:10px;\n            overflow:hidden;\n            background:#fff;\n        }\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-image{\n            width:100%;\n            height:100%;\n            display:block;\n            object-fit:contain;\n            background:#f7f7f5;\n        }\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-missing{\n            padding:18px;\n            border:1px dashed #ccc;\n            border-radius:12px;\n            color:#777;\n        }\n        #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-loader{\n            display:inline-block;\n            width:18px;\n            height:18px;\n            margin-right:8px;\n            border:2px solid currentColor;\n            border-right-color:transparent;\n            border-radius:50%;\n            vertical-align:-4px;\n            animation:baysMbdSpin .7s linear infinite;\n        }\n        @keyframes baysMbdSpin{to{transform:rotate(360deg)}}\n        @media(max-width:700px){\n            #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-input{font-size:16px;min-height:180px}\n            #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-btn{width:100%}\n            #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-card-head{align-items:flex-start;flex-direction:column}\n            #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-zip-one{width:100%}\n            #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-grid{grid-template-columns:repeat(2,minmax(0,1fr))}\n            #bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a .bays-mbd-title{font-size:19px}\n        }\n    <\/style>\n\n    <script>\n    (function(){\n        const root = document.getElementById(\"bays-mbd-f87a371a-4677-4807-9f28-5afe63c77c5a\");\n        if (!root) return;\n\n        const ajaxUrl = root.dataset.ajaxUrl;\n        const nonce = root.dataset.nonce;\n        const input = root.querySelector('.bays-mbd-input');\n        const searchBtn = root.querySelector('.bays-mbd-search');\n        const downloadAllBtn = root.querySelector('.bays-mbd-download-all');\n        const zipAllBtn = root.querySelector('.bays-mbd-zip-all');\n        const status = root.querySelector('.bays-mbd-status');\n        const results = root.querySelector('.bays-mbd-results');\n\n        let currentGroups = [];\n\n        function setStatus(message, isError){\n            status.innerHTML = message || '';\n            status.classList.toggle('is-visible', !!message);\n            status.classList.toggle('is-error', !!isError);\n        }\n\n        function parseBarcodes(){\n            return [...new Set(\n                input.value\n                    .split(\/[\\n\\r,;]+\/)\n                    .map(v => v.trim())\n                    .filter(Boolean)\n            )];\n        }\n\n        function escapeHtml(value){\n            return String(value).replace(\/[&<>\"']\/g, function(ch){\n                return {'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#039;'}[ch];\n            });\n        }\n\n        function setBusy(button, busy, label){\n            if (busy) {\n                button.dataset.oldText = button.textContent;\n                button.innerHTML = '<span class=\"bays-mbd-loader\"><\/span>' + label;\n                button.disabled = true;\n            } else {\n                button.textContent = button.dataset.oldText || label;\n                button.disabled = false;\n            }\n        }\n\n        function render(groups){\n            results.innerHTML = '';\n            let totalImages = 0;\n\n            groups.forEach(group => {\n                const card = document.createElement('section');\n                card.className = 'bays-mbd-card';\n\n                const head = document.createElement('div');\n                head.className = 'bays-mbd-card-head';\n\n                const title = document.createElement('h3');\n                title.className = 'bays-mbd-title';\n                title.textContent = 'Barkod: ' + group.barcode;\n                head.appendChild(title);\n\n                if (group.images && group.images.length) {\n                    totalImages += group.images.length;\n\n                    const zipBtn = document.createElement('button');\n                    zipBtn.type = 'button';\n                    zipBtn.className = 'bays-mbd-btn bays-mbd-zip-one';\n                    zipBtn.textContent = 'ZIP \u0130ndir';\n                    zipBtn.addEventListener('click', () => requestZip([group], zipBtn));\n                    head.appendChild(zipBtn);\n                }\n\n                card.appendChild(head);\n\n                if (!group.images || !group.images.length) {\n                    const missing = document.createElement('div');\n                    missing.className = 'bays-mbd-missing';\n                    missing.textContent = 'Bu barkod i\u00e7in medya k\u00fct\u00fcphanesinde g\u00f6rsel bulunamad\u0131.';\n                    card.appendChild(missing);\n                } else {\n                    const grid = document.createElement('div');\n                    grid.className = 'bays-mbd-grid';\n\n                    group.images.forEach(image => {\n                        const item = document.createElement('div');\n                        item.className = 'bays-mbd-image-card';\n\n                        const link = document.createElement('a');\n                        link.className = 'bays-mbd-image-link';\n                        link.href = image.url;\n                        link.target = '_blank';\n                        link.rel = 'noopener';\n\n                        const img = document.createElement('img');\n                        img.className = 'bays-mbd-image';\n                        img.src = image.url;\n                        img.alt = group.barcode;\n                        img.loading = 'lazy';\n\n                        link.appendChild(img);\n                        item.appendChild(link);\n                        grid.appendChild(item);\n                    });\n\n                    card.appendChild(grid);\n                }\n\n                results.appendChild(card);\n            });\n\n            downloadAllBtn.disabled = totalImages === 0;\n            zipAllBtn.disabled = totalImages === 0;\n        }\n\n        async function search(){\n            const barcodes = parseBarcodes();\n\n            if (!barcodes.length) {\n                setStatus('L\u00fctfen en az bir barkod yaz.', true);\n                return;\n            }\n\n            setBusy(searchBtn, true, 'ARANIYOR');\n            downloadAllBtn.disabled = true;\n            zipAllBtn.disabled = true;\n            results.innerHTML = '';\n            setStatus('<span class=\"bays-mbd-loader\"><\/span>Medya k\u00fct\u00fcphanesi taran\u0131yor...', false);\n\n            const body = new URLSearchParams();\n            body.append('action', 'bays_mbd_search');\n            body.append('nonce', nonce);\n            body.append('barcodes', JSON.stringify(barcodes));\n\n            try {\n                const response = await fetch(ajaxUrl, {\n                    method: 'POST',\n                    headers: {'Content-Type':'application\/x-www-form-urlencoded; charset=UTF-8'},\n                    body: body.toString()\n                });\n                const data = await response.json();\n\n                if (!data.success) {\n                    throw new Error(data.data && data.data.message ? data.data.message : 'Arama s\u0131ras\u0131nda hata olu\u015ftu.');\n                }\n\n                currentGroups = data.data.groups || [];\n                render(currentGroups);\n\n                setStatus(\n                    '<strong>' + data.data.found_count + '<\/strong> g\u00f6rsel bulundu. ' +\n                    '<strong>' + data.data.missing_count + '<\/strong> barkodda g\u00f6rsel bulunamad\u0131.',\n                    false\n                );\n            } catch (error) {\n                setStatus(escapeHtml(error.message || 'Beklenmeyen bir hata olu\u015ftu.'), true);\n            } finally {\n                setBusy(searchBtn, false, 'G\u00d6RSELLER\u0130 GET\u0130R');\n            }\n        }\n\n        async function requestZip(groups, button){\n            const ids = [];\n            groups.forEach(group => {\n                (group.images || []).forEach(image => ids.push(image.id));\n            });\n\n            const uniqueIds = [...new Set(ids)];\n            if (!uniqueIds.length) return;\n\n            setBusy(button, true, 'ZIP HAZIRLANIYOR');\n\n            const body = new URLSearchParams();\n            body.append('action', 'bays_mbd_zip');\n            body.append('nonce', nonce);\n            body.append('attachment_ids', JSON.stringify(uniqueIds));\n\n            try {\n                const response = await fetch(ajaxUrl, {\n                    method:'POST',\n                    headers:{'Content-Type':'application\/x-www-form-urlencoded; charset=UTF-8'},\n                    body:body.toString()\n                });\n                const data = await response.json();\n\n                if (!data.success) {\n                    throw new Error(data.data && data.data.message ? data.data.message : 'ZIP olu\u015fturulamad\u0131.');\n                }\n\n                window.location.href = data.data.url;\n            } catch (error) {\n                setStatus(escapeHtml(error.message || 'ZIP olu\u015fturulamad\u0131.'), true);\n            } finally {\n                setBusy(button, false, button === zipAllBtn ? 'TOPLU ZIP \u0130ND\u0130R' : 'ZIP \u0130ndir');\n            }\n        }\n\n        searchBtn.addEventListener('click', search);\n\n        zipAllBtn.addEventListener('click', function(){\n            requestZip(currentGroups, zipAllBtn);\n        });\n\n        downloadAllBtn.addEventListener('click', function(){\n            const images = [];\n            currentGroups.forEach(group => {\n                (group.images || []).forEach(image => images.push(image));\n            });\n\n            if (!images.length) return;\n\n            images.forEach((image, index) => {\n                setTimeout(() => {\n                    const a = document.createElement('a');\n                    a.href = image.url;\n                    a.download = image.filename || '';\n                    a.target = '_blank';\n                    a.rel = 'noopener';\n                    document.body.appendChild(a);\n                    a.click();\n                    a.remove();\n                }, index * 180);\n            });\n        });\n    })();\n    <\/script>\n    <\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-66760","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.climberbc.com\/ru\/wp-json\/wp\/v2\/pages\/66760","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.climberbc.com\/ru\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.climberbc.com\/ru\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.climberbc.com\/ru\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.climberbc.com\/ru\/wp-json\/wp\/v2\/comments?post=66760"}],"version-history":[{"count":7,"href":"https:\/\/www.climberbc.com\/ru\/wp-json\/wp\/v2\/pages\/66760\/revisions"}],"predecessor-version":[{"id":66767,"href":"https:\/\/www.climberbc.com\/ru\/wp-json\/wp\/v2\/pages\/66760\/revisions\/66767"}],"wp:attachment":[{"href":"https:\/\/www.climberbc.com\/ru\/wp-json\/wp\/v2\/media?parent=66760"}],"curies":[{"name":"WP","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}