// Only define DEBUG_MODE if it's not already defined if (!defined('DEBUG_MODE')) { define('DEBUG_MODE', false); } // Only show errors in development if (DEBUG_MODE === true) { ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); } // Check if article exists if (empty($article)) { // Article not found, show 404 page include_once FRONTEND_PATH . '/templates/404.php'; exit; } // Set page variables $pageTitle = $article['title'] . ' - ' . APP_NAME; $pageDescription = !empty($article['excerpt']) ? strip_tags($article['excerpt']) : truncate_text(strip_tags($article['content']), 160); // Clean any remaining HTML entities from the description $pageDescription = html_entity_decode(strip_tags($pageDescription)); $ogType = 'article'; $ogImage = !empty($article['featured_image']) ? 'https://' . $_SERVER['HTTP_HOST'] . '/' . $article['featured_image'] : null; $currentUrl = 'https://' . $_SERVER['HTTP_HOST'] . '/article/' . $article['slug']; $activeNav = ''; $showBreadcrumbs = true; // Set breadcrumbs $breadcrumbs = []; // Add category to breadcrumbs if available if (!empty($articleCategories) && count($articleCategories) > 0) { $category = $articleCategories[0]; // Use first category $breadcrumbs[] = [ 'title' => $category['name'], 'url' => '/category/' . $category['slug'] ]; } // Add article to breadcrumbs $breadcrumbs[] = [ 'title' => $article['title'], 'active' => true ]; // Generate schema.org markup for article $schemaMarkup = generate_article_schema($article); // The update_tags function has been moved to frontend/includes/functions.php // Debug: Before view count increment error_log("DEBUG: Before increment_article_views - Article ID: " . $article['id']); // Increment view count before displaying increment_article_views($article['id']); // Debug: After view count increment error_log("DEBUG: After increment_article_views - Article ID: " . $article['id']); // For debugging - create a debug log that will be displayed on the page $debugLog = []; $debugLog[] = "Debug: Article ID: " . $article['id']; // Get database connection global $db; // Initialize debug log $debugLog[] = "Using existing database connection via dbQuery"; // Debug: Database connection check error_log("DEBUG: Database connection check - DB is " . ($db ? "available" : "NOT available")); // Make sure article tags are loaded and initialized as an array if (!isset($articleTags)) { // Fetch existing tags for this article try { if ($db) { $tagQuery = "SELECT t.id, t.name, t.slug FROM tags t JOIN news_tags nt ON t.id = nt.tag_id WHERE nt.news_id = ?"; $tagStmt = $db->prepare($tagQuery); $tagStmt->execute([$article['id']]); $articleTags = $tagStmt->fetchAll(PDO::FETCH_ASSOC); } else { $articleTags = []; error_log('Database connection not available when fetching article tags'); } } catch (Exception $e) { // If there's an error, initialize as empty array $articleTags = []; error_log('Error fetching article tags: ' . $e->getMessage()); } } // Ensure $articleTags is always an array if (!is_array($articleTags)) { $articleTags = []; } // Debug: Before calling update_tags error_log("DEBUG: About to call update_tags function - Article ID: " . $article['id']); error_log("DEBUG: ArticleTags count before update: " . count($articleTags)); // Update article tags based on content $tagsUpdated = false; $tagsUpdated = update_tags(); error_log("DEBUG: update_tags function returned: " . ($tagsUpdated ? "TRUE" : "FALSE")); // Refresh article tags after potential updates if update was successful if ($tagsUpdated && $db) { error_log("DEBUG: Refreshing article tags after successful update"); try { $tagQuery = "SELECT t.id, t.name, t.slug FROM tags t JOIN news_tags nt ON t.id = nt.tag_id WHERE nt.news_id = ?"; $tagStmt = $db->prepare($tagQuery); $tagStmt->execute([$article['id']]); $articleTags = $tagStmt->fetchAll(PDO::FETCH_ASSOC); } catch (Exception $e) { // Log error but continue with existing tags error_log('Error refreshing article tags: ' . $e->getMessage()); } } // Update debug log with more information $debugLog[] = "Debug: Database connection: " . ($db ? "Available" : "NOT available"); $debugLog[] = "Debug: ArticleTags count: " . count($articleTags); // Add function call trace for debugging $debugLog[] = "Debug: Execution trace:"; $debugLog[] = "- Before increment_article_views"; $debugLog[] = "- After increment_article_views"; $debugLog[] = "- Database connection check: " . ($db ? "SUCCESS" : "FAILED"); $debugLog[] = "- Article tags loaded: " . (isset($articleTags) ? "YES" : "NO"); $debugLog[] = "- About to call update_tags"; $debugLog[] = "- update_tags result: " . ($tagsUpdated ? "SUCCESS" : "FAILED"); // Add database connection details $debugLog[] = "Debug: Database connection details:"; if ($db) { $debugLog[] = "- Connection type: " . get_class($db); $debugLog[] = "- Connection hash: " . spl_object_hash($db); } // Add more detailed database info if ($db) { try { $debugLog[] = "Debug: Database info:"; $stmt = $db->query("SELECT DATABASE() as db_name"); $dbInfo = $stmt->fetch(PDO::FETCH_ASSOC); $debugLog[] = "- Current database: " . ($dbInfo['db_name'] ?? 'unknown'); // Check if tags table exists and has data $stmt = $db->query("SELECT COUNT(*) as tag_count FROM tags"); $tagCount = $stmt->fetch(PDO::FETCH_ASSOC); $debugLog[] = "- Tags in database: " . ($tagCount['tag_count'] ?? 'unknown'); } catch (Exception $e) { $debugLog[] = "- Error getting DB info: " . $e->getMessage(); } } // Include header include_once FRONTEND_PATH . '/includes/header.php'; // Display debug information at the top of the page (only during development) if (defined('DEBUG_MODE') && DEBUG_MODE === true) { echo '
'; echo '

Debug Information

'; echo ''; // Direct test of update_tags function with sample data if ($db) { echo '

Direct Test of update_tags Function

'; // Create sample data with proper string values $sampleArticle = [ 'id' => $article['id'], 'title' => 'Sample Title for Testing', 'content' => 'This is sample content for testing the update_tags function.' ]; // Ensure all values are strings to avoid null values $sampleArticle['title'] = (string)$sampleArticle['title']; $sampleArticle['content'] = (string)$sampleArticle['content']; $sampleTags = []; // Try to get some real tags for testing try { $stmt = $db->query("SELECT id, name, slug FROM tags LIMIT 5"); $testTags = $stmt->fetchAll(PDO::FETCH_ASSOC); echo '

Test with ' . count($testTags) . ' sample tags:

'; echo ''; // Run the test echo '

Running test update_tags function...

'; // Set global variables for the test global $article, $articleTags; $originalArticle = $article; $originalTags = $articleTags; // Temporarily set global variables for the test $article = $sampleArticle; $articleTags = $sampleTags; // Run the test $testResult = update_tags(); // Restore original values $article = $originalArticle; $articleTags = $originalTags; echo '

Test result: ' . ($testResult ? 'SUCCESS' : 'FAILED') . '

'; } catch (Exception $e) { echo '

Error during test: ' . htmlspecialchars($e->getMessage()) . '

'; } } echo '
'; } ?>

تسريبات iPhone 17: تصميم أنحف، كاميرا محسّنة وتقنيات جديدة.. ولكن ما الثمن؟

تسريبات iPhone 17: تصميم أنحف، كاميرا محسّنة وتقنيات جديدة.. ولكن ما الثمن؟

تستعد شركة آبل للإعلان رسميًا عن سلسلة هواتف iPhone 17 خلال الأسبوع الثاني من سبتمبر/أيلول 2025، بحسب تسريبات متعددة. من المتوقع أن يشهد هذا الجيل تحديثات تصميمية وتقنية جذرية تجعله واحدًا من أبرز إصدارات الشركة في السنوات الأخيرة.

ارتفاع مرتقب في الأسعار.. والسبب ليس الرسوم الجمركية فقط

تشير تقارير من وول ستريت جورنال إلى أن آبل تنوي رفع أسعار بعض طرازات iPhone 17، ليس بسبب الرسوم الجمركية، وإنما نتيجة للتغييرات الكبيرة في التصميم وإدخال تقنيات جديدة. ويأتي ذلك بالتزامن مع تهديدات أمريكية بفرض 25% رسوم جمركية على الأجهزة المصنوعة خارج البلاد، وهو ما قد يؤثر على الأسعار عالميًا.

رغم ذلك، كشف تقرير بلومبرغ أن طراز iPhone 17 Air سيبدأ من 899 دولارًا، وهو نفس سعر iPhone 16 Plus، رغم أنه يأتي بتصميم أنحف وتضحيات من ناحية البطارية.

ويتوقع أن تبدأ الطلبات المسبقة يوم 12 سبتمبر/أيلول، على أن يتوفر في الأسواق في 19 من الشهر ذاته.

iPhone 17 Air.. أنحف هاتف في تاريخ آبل

من أبرز الابتكارات هو طراز iPhone 17 Air، الذي يتميز بسماكة لا تتجاوز 5.5 ملم، ليصبح أنحف هاتف تنتجه آبل على الإطلاق. يأتي الجهاز بكاميرا خلفية واحدة بدقة 48 ميغابكسل مثبتة في شريط أفقي جديد، ومنفذ USB-C منحرف قليلاً لتناسب الهيكل النحيف.

التصميم يشمل أيضًا دمج زر الصوت وزر الإجراء في زر موحد، وجسم الهاتف ينقسم إلى نصف خلفي من الألمنيوم والنصف الآخر من الزجاج، لدعم الشحن اللاسلكي.

ومن حيث الألوان، ستُطرح نسخة باللون الأزرق السماوي، المستوحى من لون MacBook Air الجديد.

شاشات محسنة وتقنية ProMotion للجميع

تدعم جميع نسخ iPhone 17 تقنية ProMotion لعرض أسرع وأكثر سلاسة، بالإضافة إلى ميزة الشاشة الدائمة Always-On. أما قياسات الشاشات، فهي:

  • iPhone 17: 6.1 بوصة
  • iPhone 17 Pro: 6.3 بوصة
  • iPhone 17 Pro Max: 6.9 بوصة
  • iPhone 17 Air: 6.6 بوصة

مواصفات تقنية رائدة ومعالج A19 الجديد

تعمل جميع الأجهزة بشريحة A19، فيما تحصل النسخ Pro وPro Max على شريحة A19 Pro الأقوى. وتأتي جميع الطرازات بذاكرة RAM سعة 12 غيغابايت لأول مرة، دعمًا لتقنيات Apple Intelligence التي ستنطلق تدريجيًا حتى عام 2026.

كما تدعم الهواتف الجديدة تقنية Wi-Fi 7، مع إلغاء منفذ الشريحة التقليدي والاعتماد الكامل على eSIM عالميًا.

كاميرا أمامية بدقة أعلى وتقنيات تصوير مزدوجة

من المتوقع أن تحتوي هواتف السلسلة على كاميرا أمامية بدقة 24 ميغابكسل، وهي ترقية كبيرة مقارنة بالطرازات السابقة.

بينما يتميز iPhone 17 Pro بكاميرا تليفوتو بدقة 48 ميغابكسل وتقريب بصري 3.5x، وتصميم كاميرات أفقي مستوحى من Google Pixel. كما ترددت معلومات عن ميزة تصوير مزدوج بالكاميرا الأمامية والخلفية، ما سيكون مفيدًا لصنّاع المحتوى.

بطارية جديدة ومخاوف حول أداء Air

رغم أن هاتف iPhone 17 Air يأتي بتصميم نحيف، تشير تقارير إلى أنه سيحتوي على بطارية بتقنية الأنود السيليكوني الجديدة من شركة TDK، ما يساعد على تحقيق أداء مشابه لبطارية iPhone 16 الأساسي.

لكن تقارير أخرى حذرت من أن 60-70% فقط من المستخدمين سيتمكنون من استخدام الهاتف طوال اليوم دون الحاجة لإعادة الشحن، مقارنة بنسبة 80%-90% في الطرازات الأخرى. وتشير شائعات إلى نية آبل توفير غطاء بطارية مخصص لهذا الطراز لتعويض سعة البطارية المحدودة.

مزيج من الابتكار والقيود.. هل تنجح آبل؟

بين التصميم النحيف، والتحسينات في الكاميرا، والدعم لتقنيات مثل Wi-Fi 7 وProMotion، يبدو أن iPhone 17 يقدم دفعة قوية نحو المستقبل.

لكن ارتفاع الأسعار، والتضحية بالبطارية في الطراز Air، واستخدام الألمنيوم بدل التيتانيوم، قد تثير بعض الجدل بين المستخدمين.

مشاركة المقال:

Warning: Undefined variable $tagsUpdated in /home/comparecarriers/public_html/yallasyrianews.com/frontend/templates/article.php on line 419