// URL Parameter Capture Script for Google Ads Tracking
// Place this code in Wix Custom Code (Site-wide or page-specific)
(function() {
'use strict';
// Function to get URL parameters
function getURLParameters() {
const urlParams = new URLSearchParams(window.location.search);
const params = {};
// Capture all URL parameters
for (const [key, value] of urlParams) {
params[key] = value;
}
return params;
}
// Function to get or generate unique visitor ID
function getVisitorId() {
let visitorId = localStorage.getItem('visitor_id');
if (!visitorId) {
visitorId = 'visitor_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);
localStorage.setItem('visitor_id', visitorId);
}
return visitorId;
}
// Function to save tracking data
function saveTrackingData(data) {
// Save to localStorage with timestamp
const trackingData = {
...data,
timestamp: new Date().toISOString(),
visitor_id: getVisitorId(),
page_url: window.location.href,
referrer: document.referrer
};
// Store in localStorage
localStorage.setItem('tracking_data', JSON.stringify(trackingData));
// Also store in sessionStorage for session-based tracking
sessionStorage.setItem('current_session_tracking', JSON.stringify(trackingData));
console.log('Tracking data saved:', trackingData);
return trackingData;
}
// Function to get saved tracking data
function getTrackingData() {
const stored = localStorage.getItem('tracking_data');
return stored ? JSON.parse(stored) : null;
}
// Function to create tracking code for LINE button
function generateTrackingCode(trackingData) {
if (!trackingData) return null;
// Create a compressed tracking code
const code = btoa(JSON.stringify({
gclid: trackingData.gclid || '',
utm_source: trackingData.utm_source || '',
utm_medium: trackingData.utm_medium || '',
utm_campaign: trackingData.utm_campaign || '',
visitor_id: trackingData.visitor_id,
timestamp: trackingData.timestamp
}));
return code;
}
// Main execution
function initTracking() {
// Get URL parameters
const urlParams = getURLParameters();
// Check if this is a Google Ads click (has gclid or utm parameters)
const isGoogleAdsClick = urlParams.gclid ||
urlParams.utm_source === 'google' ||
urlParams.utm_medium === 'cpc';
if (isGoogleAdsClick || Object.keys(urlParams).length > 0) {
// Save tracking data
const trackingData = saveTrackingData(urlParams);
// Update LINE buttons with tracking code
updateLINEButtons(trackingData);
} else {
// Check if we have previous tracking data
const existingData = getTrackingData();
if (existingData) {
updateLINEButtons(existingData);
}
}
}
// Function to update LINE buttons with tracking parameters
function updateLINEButtons(trackingData) {
const trackingCode = generateTrackingCode(trackingData);
// Find all LINE buttons/links
const lineButtons = document.querySelectorAll('a[href*="line.me"], a[href*="line://"], .line-button, [data-line-button]');
lineButtons.forEach(button => {
const originalHref = button.href;
if (originalHref && trackingCode) {
// Add tracking parameter to LINE URL
const separator = originalHref.includes('?') ? '&' : '?';
const newHref = `${originalHref}${separator}tracking=${encodeURIComponent(trackingCode)}`;
button.href = newHref;
button.setAttribute('data-tracking-code', trackingCode);
}
});
// Also make tracking code available globally for manual use
window.trackingCode = trackingCode;
window.trackingData = trackingData;
}
// Function to send tracking data to external service (like n8n webhook)
function sendToWebhook(trackingData, event = 'page_visit') {
// Replace with your n8n webhook URL
const webhookURL = 'https://n8n.sakww.com/webhook-test/get-url';
if (!webhookURL || webhookURL === 'https://n8n.sakww.com/webhook-test/get-url') {
console.log('Webhook URL not configured');
return;
}
const payload = {
event: event,
data: trackingData,
user_agent: navigator.userAgent,
screen_resolution: `${screen.width}x${screen.height}`
};
fetch(webhookURL, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
}).then(response => {
console.log('Tracking data sent to webhook:', response.status);
}).catch(error => {
console.error('Error sending tracking data:', error);
});
}
// Initialize tracking when page loads
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initTracking);
} else {
initTracking();
}
// Re-run when new content is loaded (for Wix dynamic content)
const observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.addedNodes.length) {
const trackingData = getTrackingData();
if (trackingData) {
setTimeout(() => updateLINEButtons(trackingData), 100);
}
}
});
});
observer.observe(document.body, {
childList: true,
subtree: true
});
// Global functions for manual use
window.getTrackingData = getTrackingData;
window.getTrackingCode = function() {
const data = getTrackingData();
return data ? generateTrackingCode(data) : null;
};
// Optional: Send tracking data to webhook on page load
// Uncomment the lines below if you want to send data immediately
/*
setTimeout(() => {
const trackingData = getTrackingData();
if (trackingData && (trackingData.gclid || trackingData.utm_source)) {
sendToWebhook(trackingData, 'google_ads_click');
}
}, 1000);
*/
})();
top of page
ไม้โครง
ไม้ระแนง ไม้สน
หมวดหมู่นี้แสดงไม้โครงที่ไสเรียบแล้วที่ใช้ในการก่อสร้าง การผลิตเฟอร์นิเจอร์ การทำโครงสร้างหลังคาน้ำหนักเบา โครงสร้างบ้าน แบบหล่อคอนกรีต ราคาไม่แพง
ราคารวมภาษีมูลค่าเพิ่ม
ไม้โครงสนรัสเซีย
| 15 มม. x 40 มม. x 250 ซม. | | | |
| 20 มม. x 46 มม. x 200 ซม. | | | |
| 40 มม. x 40 มม. x 250 ซม. | | | |
ไม้โครง (battens) ทำจากไม้สนที่ไสเรียบแล้ว มีน้ำหนักเบา ยืดหยุ่นและทนทาน ไม้โครงใช้ในโครงสร้างบ้าน ถ้าเปรียบเทียบกับไม้เนื้ออ่อนชนิดอื่นๆ ไม้โครงทำจากไม้สนรัสเซียสามารถรับน้ำหนักปานกลางได้
ไม้โครงยังใช้ทำ ไม้รองฝาผนังและเพดานไม้ ไม้สนรัสเซียเป็นวัสดุที่เป็นมิตรต่อสิ่งแวดล้อม สามารถในการทำเฟอร์นิเจอร์ได้ด้วย ไม้โครงถูกบรรจุในฟิล์มพลาสติก มัดละ 10 หรือ 4 ท่อน เพื่อความสะดวกในการขนส่ง
ไม้โครงสนรัสเซีย
| 20 มม. x 45 มม. x 300 ซม. | | | |
| 20 มม. x 70 มม. x 300 ซม. | | | |
| 20 มม. x 96 มม. x 300 ซม. | | | |
| 35 มม. x 45 มม. x 300 ซม. | | | |
| 35 มม. x 70 มม. x 300 ซม. | | | |
| 35 มม. x 96 มม. x 300 ซม. | | | |
| 45 มม. x 45 มม. x 300 ซม. | | | |
| 45 มม. x 70 มม. x 300 ซม. | | | |
| 45 มม. x 96 มม. x 300 ซม. | | | |
ไม้สำหรับโครงสร้างทำจากไม้สนพันธุ์ Picea Abies มีน้ำหนักเบากว่าไม้สนพันธุ์ Pinus Sylvestris และทนทานต่อเชื้อรา ซึ่งสำคัญมากในการทำโครงสร้างไม้ และโครงถัก โปรดทราบว่าเราไม่ใช้ระบบการวัดมาตรฐาน
ในการวัดไม้โครง ขนาด 1.5”x3”ของเราเท่ากับขนาดประมาณ 2”x4” ในระบบอเมริกัน ความหนา 1”ของเราเท่ากับ 23 มม. (ไม่ใช่ 17 หรือ 19 มม.) กรุณาดูขนาดมิลลิเมตรของไม้เพื่อเลื่อกไม้ให้ถูกต้อง
ไม้แบบ (ไม้สนแผ่น 6 เมตร) (ไสและขัด)
| 20 มม. x 96 มม. x 600 ซม. | | | |
| 20 มม. x 145 มม. x 600 ซม. | | | |
| 20 มม. x 195 มม. x 600 ซม. | | | |
| 45 มม. x 96 มม. x 600 ซม. | | | |
| 45 มม. x 145 มม. x 600 ซม. | | | |
| 45 มม. x 195 มม. x 600 ซม. | | | |
| 35 มม. x 96 มม. x 600 ซม. | | | |
| 35 มม. x 14.5 มม. x 600 ซม. | | | |
| 35 มม. x 19.5 มม. x 600 ซม. | | | |
ไม้ขนาดอื่นๆที่ใช้ได้ในโครงสร้าง ดูรายละเอียดได้ในหมวดหมู่ "ไม้แปรรูป" และ “ไม้โครง”
ไม้สนขาวเหมาะสำหรับโครงสร้างและงานก่อสร้างอื่นๆ เนื่องจากราคาคุ้มค่า
อื่นๆ
ไม้ของเราส่วนมากมีความยาว 6 เมตร และมีรูปตัดตามขวางหลายๆ รูป ดูขนาดทั้งหมดได้ในหมวดหมู่ "ไม้แปรรูป / ไม้กระดาน" ความยาว 6 เมตรเป็นความยาวมาตรฐานของไม้สนรัสเซียเพราะว่าต้นไม้สนถูกตัดเป็นซุงยาว 6 เมตร
ไม้โครงเป็นที่นิยมกันใช้ในการทำไม้ตงสำหรับการติดตั้งใม้ฝา ดูรายละเอียดไม้สำหรับฝาผนังและเพดานที่ติดตั้งได้เองโดยไม่ต้องจ้างช่างไม้ ดูได้ในหมวดหมู่ "ไม้ฝา / ไม้ฝ้า"
คุณมีโครงการงานก่อสร้างใหญ่ใช่ไหม เชิญดูรายละเอียดในหมวดหมู่ "ขายส่ง" สำหรับลูกค้ารายใหญ่และการสั่งซื้อตามเงื่อนไขพิเศษ
ติดต่อเราได้ที่ช่องทางต่าง ๆ ข้างล่าง
เจ้าหน้าที่พร้อมตอบคำถาม เรื่องส่วนลด และเงื่อนไขอื่นๆ
bottom of page