PHP에서 JavaScript를 처리하려고 할 때 특정 참조 유형의 노드를 다른 참조로 이동하려고합니다. 나는 각 페이지 내부 PAGES
되는 프로젝트 각 프로젝트 내부
이 콜 아웃
을 각 콜 아웃 내부 제품이노드에서 노드 참조를 제거하는 Drupal
이는 구조입니다.
하나의 CALLOUT에서 다른 CALLOUT으로 제품을 가져오고 싶습니다. 나는 이것들을 병합 할 수 있지만, 지금 내가하고 싶은 것은 첫번째 인스턴스를 삭제하는 것이다. 예 :
나는 내가 병합 할 제품을 얻을 수 PAGE 6 선 B.
하여 해당 제품을 병합하고 PAGE 6 콜 아웃 A.에있는 제품 AAG-794200
을 가지고 있지만 지금은에서 제거 할 필요 CALLOUT A. 내 코드는 다음과 같습니다.
$merge = explode(',', $merge); //Merge SKUs
$mpages = explode(',', $mpages); //Merge Pages
$mcallouts = explode(',', $mcallouts); //Merge Callouts
$mcallout_nid = explode(',', $mcallout_nid); //Merge Current callout
$length = count($merge);
$e = 0;
while ($e < $length) {
//Where is the SKU going to?
$to_callout_letter = strtoupper($mcallouts[$e]);
$to_page_num = $mpages[$e];
$sku = $merge[$e];
$from_callout = $mcallout_nid[$e];
//Where is the SKU coming from?
$other_callout = node_load($from_callout);
//Need page ID of current callout for project purposes
$page_nid = $other_callout->field_page[0]['nid'];
$page = node_load($page_nid);
//Need the project NID
$project_nid = $page->field_project[0]['nid'];
//We need to get the NID of the page we are going to
$page_nid = db_query('SELECT * FROM content_type_page WHERE field_page_order_value = "%d" and field_project_nid = "%d" ORDER BY vid DESC LIMIT 1', $to_page_num, $project_nid);
$page_nid_res = db_fetch_array($page_nid);
$to_page_nid = $page_nid_res['nid'];
//We need to get the NID of the callout here
$co_nid = db_query('SELECT * FROM content_type_callout WHERE field_identifier_value = "%s" and field_page_nid = "%d"', $to_callout_letter, $to_page_nid);
$co_nid_res = db_fetch_array($co_nid);
$to_callout_letter_nid = $co_nid_res['nid'];
//Load the present callout the SKU resides on
$f_callout = node_load($from_callout);
$callout = node_load($to_callout_letter_nid);
$long = count($f_callout->field_skus);
$deletecallout = array();
foreach($f_callout->field_skus as $skus) {
$s = 0;
while ($s < $long) {
if($skus['nid'] == $sku) {
$callout->field_skus[] = $skus;
$s++;
}
else {
$deletecallout[] = $skus;
$s++;
}
}
}
foreach($other_callout->field_images as $old_image) {
$callout->field_images[] = $old_image;
}
foreach($other_callout->field_line_art as $old_image) {
$callout->field_line_art[] = $old_image;
}
foreach($other_callout->field_swatches as $old_image) {
$callout->field_swatches[] = $old_image;
}
$callout->field_copy_text[0]['value'] .= $other_callout->field_copy_text[0]['value'];
$callout->field_notes[0]['value'] .= $other_callout->field_notes[0]['value'];
$callout->field_image_notes[0]['value'] .= $other_callout->field_image_notes[0]['value'];
$callout->field_status[0]['value'] = 'In Process';
node_save($callout);
이 경우 제품이 병합되지만 원본은 삭제되지 않습니다.
도움 주셔서 감사합니다. 나는 그것이 단순한 무언가라는 것을 압니다. 그리고 그것은 손 - 얼굴의 순간이 될 것입니다.
코드 스 니펫이 진행 상황을 이해하기에 충분하지 않습니다. 아무런 설명이없는 변수가 있습니다. 자세한 정보를 제공해주십시오. – kekkis
@kekkis - 전체 기능이 게시됩니다. – webdevsoup
foreach 루프에서 $ deletecallout 배열을 채우고 있지만 아무 것도하지 않는 것 같습니다. 그게 빠진 것이 아닌가? 그리고 귀하의 코드는 여전히 불완전합니다. while ($ e <$ length) 루프의 마지막 중괄호는 어디에 있습니까? –