2014-01-22 3 views
0

현재 오래된 사이트를 개편하고 있습니다. 나는 html, php를 업데이트하고 그것을 mysql 데이터베이스에서 sql 데이터베이스로 변환했다. 그 모든 것은 좋고 훌륭합니다. 내 지식 분야는 데이터베이스, PHP, SQL 및 HTML에 대한 공정한 것입니다. 한 가지 문제는 사이트가 하위 메뉴 항목 HM_ARRAY.js에 하드 코딩 된 배열을 사용하는 HM_LOADER.js라는 오래된 자바 스크립트 프로젝트/라이브러리를 사용하고 있다는 것입니다. 자바 스크립트의 사용을 메인 메뉴를 생성하고 시작하는 기능이 있습니다 :자바 스크립트에 php 배열을 건네 주면 수평 팝업 메뉴가 나타납니다.

HM_Array1 = [ 
[150, 
142, // left_position 
145, // top_position 
], 
["<b>Finance & Insurance</b>","/order_form.php?num=1&firstTime=1",1,0,0], 
["<b>Legal Awareness</b>","/order_form.php?num=2&firstTime=1",1,0,0] 
] 

HM_Array2 = [ 
[180, 
142, 
260, 
],   
["<b>Sales Strength I</b>","/order_form.php?num=24&firstTime=1",1,0,0], 
["<b>Sales Strength II</b>","/order_form.php?num=25&firstTime=1",1,0,0], 
//["<b>Sales Strength II Handouts</b>","/order_form.php?num=26&firstTime=1",1,0,0], 
["<b>Communispond</b>","/order_form.php?num=36&firstTime=1",1,0,0], 
["<b>PSS</b>","/order_form.php?num=35&firstTime=1",1,0,0] 
] 

HM_Array3 = [... 

을 : 차례 차례이처럼 보이는 HM_array 파일을 사용하는의 hm_loader를 사용

function printOrderRequestOptions() 
{ 
?> 
    <SCRIPT LANGUAGE="JavaScript1.2" 
    SRC="HM_Loader.js" 
    TYPE='text/javascript'></SCRIPT> 

    <table width="142" height=450 border="0" cellpadding="0" cellspacing="0" bgcolor="500b4c"> 
    <tr> 
     <td valign="middle"> 
     <a href="order.php" 
     onMouseOver="image1.src='/images/header/finance_on.gif';popUp('elMenu1',event)" 
     onMouseOut="image1.src='/images/header/finance_off.gif';popDown('elMenu1')"> 
     <img name="image1" src="/images/header/finance_off.gif" border=0></a> 
     </td> 
    </tr> 
    <tr> 
     <td valign="middle"> 
     <a href="order.php" 
     onMouseOver="image2.src='/images/header/salesseries_on.gif';popUp('elMenu2',event)" 
     onMouseOut="image2.src='/images/header/salesseries_off.gif';popDown('elMenu2')"> 
     <img name="image2" src="/images/header/salesseries_off.gif" border=0></a> 
     </td> 
    </tr>  
    <tr> 
     <td valign="middle"> 
     <a href="order.php" 
     onMouseOver="image3.src='/images/header/dealerservices_on.gif';popUp('elMenu3',event)" 
     onMouseOut="image3.src='/images/header/dealerservices_off.gif';popDown('elMenu3')"> 
     <img name="image3" src="/images/header/dealerservices_off.gif" border=0></a> 
     </td> 
    </tr> 
</table> 
    ?> 
} 

내 데이터베이스에서 쿼리를 기반으로 동적이 필요합니다. 제 업무 지침에 따라 사이트와 파일을 최소한의 구조 조정 만 할 수 있습니다. 따라서 기본적으로 시스템을 그대로 유지하면서 이러한 하위 메뉴 항목을 동적으로 유지해야합니다. 나는 벽에 머리를 때리는 제 삼일에 있습니다. PHP로 데이터 구조를 생성 한 다음 json으로 인코딩하는 방법을 알고 있지만이 기존 코드 시스템에서 어떻게 사용할 수 있습니까? 자세한 정보가 필요하면 알려주십시오. 오늘은 무언가를 보여줄 마감 기한이었습니다. 그리고 나는 아직도 어디에서 시작합니까? ...

답변

0

나는 당신의 질문이 무엇인지는 잘 모르지만 아마도 이것은 시작하게 할 것입니다.

난 당신이 데이터베이스에서 값을 받고 자바 스크립트에 출력 그들에게 시도 사이에 어딘가에 갇혀있다 생각한다. json_encode()이 답입니다. 그 사실을 알고 계실 것입니다. 나는 당신이 정확히 고투하고있는 곳인지 확신하지 못합니다.

이것은 도움이 될 것입니다. 그냥 example.php에 던져서 실행하십시오. http://radleygh.com/images/chrome_2014-022-15-13-12-16.png

<?php 
// Here is a single base object (HM_Array1), we'll add sub items separately 
$array = array(
    'position' => array(
    150, // Mystery! 
    142, // Left 
    145, // Top 
), 
    'items' => array(), 
); 

// Add your items separately, preferably in a loop. This isn't a loop, that would be superflous. 
$array['items'][] = array(
    'title' => '<b>Finance & Insurance</b>', 
    'slug' => '/order_form.php?num=1&firstTime=1', 
    'x' => 1, 
    'y' => 0, 
    'z' => 0, 
); 

$array['items'][] = array(
    'title' => '<b>Legal Awareness</b>', 
    'slug' => '/order_form.php?num=2&firstTime=1', 
    'x' => 1, 
    'y' => 0, 
    'z' => 0, 
); 

// You'll want to see how this works, so here's some debuggery: 

echo '<h3>Preview of your object in PHP:</h3>'; 
echo '<pre>'; 
echo htmlspecialchars(print_r($array, true)); 
echo '</pre>'; 
echo '<hr />'; 

echo '<h3>The javascript version:</h3>'; 
echo '<pre>'; 

ob_start(); 
?> 
jQuery.parseJSON('<?php echo json_encode($array); ?>'); 
<?php 
$html = ob_get_clean(); 
echo htmlspecialchars(print_r($html, true)); 

echo '</pre>'; 

: 여기

출력의 스크린 샷입니다 : (당신이 그것을 시도하려는 경우 콘솔에 복사/붙여 넣기) 실제로 자바 스크립트를 사용하지 않는, 그냥 당신에게 출력을 보여줍니다 이 코드의 주요 부분은 PHP 배열의 객체 버전을 생성하는 jQuery.parseJSON 행입니다. 그런 다음 해당 개체를 사용하여 함수를 사용하여 제공 한 HM_ArrayN 배열을 구성 할 수 있습니다. 어쩌면 이것을 아약스로 설정하고 싶을 수도 있습니다. 아약스 쿼리를 수행 한 후에 JSON을 구문 분석하면됩니다.

코드의 자바 스크립트 라인은 당신에게 다음과 같은 개체를 줄 것이다 :

Object { 
    position: array(
    0: 150 
    1: 142 
    2: 145 
) 

    items: array(
    0: { 
     slug: "/order_form.php?num=1&firstTime=1" 
     title: "<b>Finance & Insurance</b>" 
     x: 1 
     y: 0 
     z: 0 
    } 
    1: { 
     slug: "/order_form.php?num=2&firstTime=1" 
     title: "<b>Legal Awareness</b>" 
     x: 1 
     y: 0 
     z: 0 
    } 
} 

그런 다음 사양에서 요구하는 형식으로이 잘 형성 배열을 변환하는 기능을 구축 할 수 있습니다. 아래 예 :

var myObject = (the javascript code above); 
var HM_Array1 = new Array(); 

HM_Array1[0] = myObject.position[0]; 
HM_Array1[1] = myObject.position[1]; 
HM_Array1[2] = myObject.position[2]; 

for(i in myObject.items) { 
    var item = new Array(); 
    item[0] = myObject.items[i].title; 
    item[1] = myObject.items[i].slug; 
    item[2] = myObject.items[i].x; 
    item[3] = myObject.items[i].y; 
    item[4] = myObject.items[i].z; 
    HM_Array.push(item); 
} 

console.log(HM_Array1); // Should look like your code. 
+0

지난 밤에 댓글이 추가되었지만 표시되지 않습니다. 오늘 아침부터 일 해왔다. 나중에 결과 및/또는 문제를 게시합니다. 내가하는 일은 현재 프레임 워크에 맞추려고하는 것입니다 ... – royjm

+0

나는 당신이 준 조언이 좋음을 압니다. 그리고 저는 두 차례 가까이 다가 왔다는 것을 압니다.하지만 여전히 그럴 것입니다. 나는이 하나의 기능에 대해 70 시간 이상이다. 나는 mysql에서 mysql으로 변환하고 160 시간 만에 모든 php/html (50+ 이미지 파일과 120+ 코드 파일)을 업데이트하여 12 년 된 사이트의 90 %를 다시 작성했다. 이 팝업 메뉴는 나에게 획을 줄 것입니다! – royjm

+0

json 객체를 전달하고 필요한 배열을 생성하지 못했습니다. 나는 다음 답에서 내가 한 것을 게시 할 것이다. – royjm

0
원래 페이지에서

, order.php 내가 전화 '모두 getClass()'기능을 다음 printOrderRequestOptions ($에는 mainMenu를) 해당을 통과 할 수 있습니다. 설정하고 PARAMS을 CONFIGS하고 실제 데이터에 대한 HM_Arrays.js에 보이는 HM_LOADER.js가 호출 여기에서

function getClass() 
{ 
    $conn = connect(); 
    $SQL = "select order_form_class_id, order_form_class_desc from order_form_class where order_form_class_status_id='100'"; 

    $stmt = runsql($SQL, $res=NULL, $ERROR_MSG=NULL); 
    while($row=sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) 
    { 
     $id = $row['order_form_class_id']; 
     $desc= $row['order_form_class_desc']; 
     $classIds[] = array($id , $desc); 
    } 
    return $classIds; 
} 
function printOrderRequestOptions($mainMenu) 
{ 
?> 
    <SCRIPT LANGUAGE="JavaScript1.2" 
     SRC="HM_Loader.js" 
     TYPE='text/javascript'></SCRIPT> 
    <style> 
     a {text-decoration:none;} 
    </style> 

    <table width="142" height=450 border="0" cellpadding="0" cellspacing="0" bgcolor="500b4c"> 
    <tr><td><img name="image2" src="/images/header/generic_132X22.gif" border=0></a></td></tr> 
    <? 
     for ($i=0;$i<count($mainMenu);$i++) 
     { 
    ?> 
     <tr> 
      <td align="center" valign="middle"> 
      <a href="order.php" 
      onMouseOver="popUp('elMenu<?=$mainMenu[$i][0]?>',event)" 
      onMouseOut="popDown('elMenu<?=$mainMenu[$i][0]?>')"> 
      <font color="white"><b><? echo $mainMenu[$i][1]; ?></b></font> 
      <img name="image<?=$i?>" src="/images/header/generic_132X22.gif" border=0></a> 
      </td> 
     </tr> 
    <? 
     } 
    ?> 
    </table> 
<? 
} 

: 그들은 다음과 같습니다 간단한 함수입니다. 배열 파일은 하드 코딩 된 배열 목록이었고 동적 인 것이 필요했습니다. 이 솔루션은 최고가 아니지만, 필자가 처음 데모 프리젠 테이션을 한 지 일주일이 지난 이래로이 작업을하기 위해해야만하는 일입니다. HM_Arrays입니다.JS는 HM_Arrays.php 이름이 바뀌 지금 보이는이 같은되었습니다

<?php 
include_once("functions/functions.php"); 

$arrayCount = getClass(); 
$subItems = subMenuItems(); 
//for ($x=0;$x<count($arrayCount);x++) 
//{ 
    $cnt = $arrayCount[0][0]; 
    //echo $arrayCount; 
    print "HM_Array".$cnt." = [ 
    [150, 
    142, // left_position 
    150, // top_position 
    ],"; 
    for ($i=0;$i<count($subItems);$i++) 
    { 
     if ($subItems[$i][0] == $cnt) 
     print "['<b>".$subItems[$i][1]."</b>','/order_form.php?num=".$subItems[$i][2]."&firstTime=1',1,0,0],"; 
    } 
    print "],"; 
//} 


    $cnt = $arrayCount[1][0]; 
    print "HM_Array".$cnt." = [ 
    [325, 
    142, // left_position 
    250, // top_position 
    ],"; 
    for ($i=0;$i<count($subItems);$i++) 
    { 
     if ($subItems[$i][0] == $cnt) 
     print "['<b>".$subItems[$i][1]."</b>','/order_form.php?num=".$subItems[$i][2]."&firstTime=1',1,0,0],"; 
    } 
    print "], "; 


    $cnt = $arrayCount[2][0]; 
    print "HM_Array".$cnt." = [ 
    [195, 
    142, 
    350, 
    ],"; 

    for ($i=0;$i<count($subItems);$i++) 
    { 
     if ($subItems[$i][0] == $cnt) 
     print "['<b>".$subItems[$i][1]."</b>','/order_form.php?num=".$subItems[$i][2]."&firstTime=1',1,0,0],"; 
    } 
    print "], "; 


    $cnt = $arrayCount[3][0]; 
    print "HM_Array".$cnt." = [ 
    [240, 
    142, 
    450, 
    ],"; 
    for ($i=0;$i<count($subItems);$i++) 
    { 
     if ($subItems[$i][0] == $cnt) 
     print "['<b>".$subItems[$i][1]."</b>','/order_form.php?num=".$subItems[$i][2]."&firstTime=1',1,0,0],"; 
    } 
    print "] "; 
?> 

내가 그것을 조금 못생긴 알지만, for 루프 작동시킬 수 없습니다. 카운터에 getClass()를 사용했지만 작동하지 않습니다. 한 번 시도한 후에는 각 하위 메뉴가 비어있게되었습니다. 이것은 효과적인 해결책입니다, 더 효과적인 코드로 작업하는 것을 도울 수있는 사람이 있습니까 ??? 모든 도움에 감사드립니다!

관련 문제