2013-11-25 3 views
1

У меня есть рабочая функция, которую я создал на моей странице osCommerce, которая сортирует продукты и передает их соответствующим перевозчикам. Он отлично работает, но не при загрузке первой страницы. На самом деле это так, как будто функция никогда не вызывается до тех пор, пока страница не будет обновлена ​​после ее загрузки в первый раз. Мне действительно нужно, чтобы эта функция выполнялась на первой странице, чтобы гарантировать, что эти продукты будут отправлены по электронной почте в правильные компании. Я вызываю функцию в checkout_success.php. У меня есть следующий чуть выше тега в файл:Функция не срабатывает при загрузке страницы.

send_dropships_mail($dropship_array, $products_array, $order_id, $deliveryaddress_array); 

Моей функция:

function send_dropships_mail($dropship_array, $products_array, $order_id, $deliveryaddress_array) { 
// Create new dropships array indexed by dsid 
$newDropships = array(); 
foreach ($dropship_array as $dropship) { 
    $newDropships[$dropship['id']] = $dropship; 
} 

// Perform grouping of products by dsid 
// Array of 'dsid' => array of product indices 
$dstToProduct = array(); 
foreach ($products_array as $i => $product) { 
    if (!isset($dstToProduct[$product['dsid']])) { 
     $dstToProduct[$product['dsid']] = array(); 
    } 

    $dstToProduct[$product['dsid']][] = $i; 
} 

$orders_products_id_query = tep_db_query("select orders_products_id from orders_products where orders_id = " . $order_id); 
while ($ipidq = tep_db_fetch_array($orders_products_id_query)) { 
    $orders_products_id_array[] = array('orders_products_id' => $ipidq['orders_products_id']); 
} 


$orders_products_id_attributes_query = tep_db_query("select orders_products_id, products_options, products_options_values from orders_products_attributes where orders_id = " . $order_id); 
while ($opidq = tep_db_fetch_array($orders_products_id_attributes_query)) { 
    $orders_products_id_attributes_array[] = array('orders_products_id' => $opidq['orders_products_id'], 
         'p_o' => $opidq['products_options'], 
         'p_o_v' => $opidq['products_options_values']); 
} 


$p_attribute = ""; 


    $headers .= 'MIME-Version: 1.0' . "\r\n"; 
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 

    $headers .= "From: [email protected] \r\n" . 
      "Reply-To: [email protected] \r\n" . 
      "X-Mailer: PHP/" . phpversion(); 

// Now we are ready to send emails 
foreach ($dstToProduct as $dsid => $productIndices) { 
    $email = $newDropships[$dsid]['email']; 
    $subject = "A new order has been placed"; 


    // Build message text 
    $date = date('m/d/Y'); 

    $text = '<span style="color: #513311; font-size: 14px;"><table cellpadding="3" style="margin-top: 20px;"><tr style="background-color: #6d7d59; color: #ffffff; font-weight: bold; font-size: 12px;"><td style="width: 240px; vertical-align:text-top;">Product Name</td><td style="width: 120px; vertical-align:text-top;">Model Number</td><td style="width: 80px; vertical-align:text-top;">Quantity</td><td style="width: 80px; vertical-align:text-top;">Price</td></tr>'; 

    foreach ($productIndices as $productIndex) { 

$p_attribute = ""; 
if (count($orders_products_id_attributes_array) > 0) { 
    foreach ($orders_products_id_attributes_array as $opidaa) { 
     if ($products_array[$productIndex]['orders_products_id'] == $opidaa['orders_products_id']) { 
      $p_attribute .= "<i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;" . $opidaa['p_o'] . "&nbsp;" . $opidaa['p_o_v'] . "</i><br>"; 
     } else { 
      $p_attribute = ""; 
     } 
} 
} 

     if ($p_attribute == "") { 
      $text .= '<tr style="background-color: #f0f0f0; color: #513311; font-size: 12px;"><td style="vertical-align:text-top;">' . $products_array[$productIndex]["text"] . '</td><td style="vertical-align:text-top;">' . $products_array[$productIndex]["model"] . '</td><td style="vertical-align:text-top;">' . $products_array[$productIndex]["qty"] . '</td><td style="vertical-align:text-top;">' . $products_array[$productIndex]["price"] . '</td></tr>'; 
     } else { 
      $text .= '<tr style="background-color: #f0f0f0; color: #513311; font-size: 12px;"><td>' . $products_array[$productIndex]["text"] . '<br>' . $p_attribute . '</td><td style="vertical-align:text-top;">' . $products_array[$productIndex]["model"] . '</td><td style="vertical-align:text-top;">' . $products_array[$productIndex]["qty"] . '</td><td style="vertical-align:text-top;">' . $products_array[$productIndex]["price"] . '</td></tr>'; 
     } 
    } 

    $text .= '</table>'; 

    $text .= '<table cellpadding="3" style="margin-top: 20px;"><tr style="background-color: #6d7d59; color: #ffffff; font-weight: bold; font-size: 12px;"><td style="width: 200px;">Delivery Address</td></tr><tr style="background-color: #f0f0f0; color: #513311; font-size: 12px;"><td>' . $deliveryaddress_array[0]['name'] . '<br>' . $deliveryaddress_array[0]['address'] . '<br>' . $deliveryaddress_array[0]['city'] . ', ' . $deliveryaddress_array[0]['state'] . '&nbsp;&nbsp;' . $deliveryaddress_array[0]['zip'] . '</td></tr></table>'; 

    if (!mail($email, $subject, $text, $headers)) { 
     mail('[email protected]', 'Error sending product', 'The follow order was not sent to the drop shippers:&nbsp;' . $order_id); 
    } 

} 
} 

Есть ли ограничение по времени Thats установить в интернет-магазин или что-то? Хотя это все еще не объясняет, почему страница нуждается в обновлении, чтобы функция работала. Любая помощь приветствуется!

ответ

1

Вам нужно поместить эту строку и всю связанную с ней логику в header.php на самом верху перед инициализацией любой другой логики.

send_dropships_mail($dropship_array, $products_array, $order_id, $deliveryaddress_array); 

Проблема заключается в том, что эта функция вызывается очень поздно в вашем коде, который почему все старые значения показаны в вашем оказанной HTML и когда вы обновите страницу, так как выполнение уже произошло в вашей последней загрузки вы видите новые данные.

Надеюсь, это поможет! :)

+0

Имеет смысл, но проблема в том, что некоторые из этих массивов не определены до тега в файле checkout_success.php. Должен ли я перемещать все массивы в файл header.php, тогда используйте: if (stripos ($ _ SERVER ['REQUEST_URI'], 'checkout_success.php')) , чтобы убедиться, что функция не выполнена ни на одном другой странице, кроме checkout_success.php? –

Смежные вопросы