2013-08-26 4 views
0

좋아, 그래서 나는 PHP로 계산기를 만들었고, 그것을 스 니펫을 통해 MODX로 포팅하려고하고있다. 이 코드를 코드 조각에 넣으려고했는데 작동하지 않습니다. 그것은 나에게 오류 메시지를 계속주고 스 니펫이있는 리소스를 볼 수 없습니다. 누구든지 아이디어가 있습니까? 감사.스 니펫으로 MODX에있는 커스텀 PHP

<?php 
function selected($val = "") 
{ 
$units = isset($_POST['units']) ? $_POST['units'] : null; 
echo ($units == $val) ? "CHECKED='CHECKED'" : ""; 
} 
$units = isset($_POST['units']) ? $_POST['units'] : null; 
$dia = isset($_POST['dia']) ? $_POST['dia'] : null; 
$depth = isset($_POST['depth']) ? $_POST['depth'] : null; 
$L = isset($_POST['L']) ? $_POST['L'] : null; 
$num = isset($_POST['num']) ? $_POST['num'] : null; 
$waste = isset($_POST['waste']) ? $_POST['waste'] : null; 
$knownvolume = isset($_POST['knownvolume']) ? $_POST['knownvolume'] : null; 
$hw = isset($_POST['hw']) ? $_POST['hw'] : null; 
//$denom = (($units == "US") ? 12 : 100); 
$tubecoverage = (($units == "US") ? 18.59 : 304.65); 
$onegalcoverage = (($units == "US") ? 231 : 3785.41); 
$twogalcoverage = (($units == "US") ? 462 : 7470.82); 
$fivegalcoverage = (($units == "US") ? 1155 : 18927.06); 

$measurements = 'in or cm'; 
    if($units == 'US'){ 
    $measurements = 'in'; 
} 
    if($units == 'Metric') 
{ 
    $measurements = 'cm'; 
} 

if($units == 'US') 
    $length = 'feet'; 
    else if($units == 'Metric') 
    $length = 'meters'; 
    else 
    $length = 'feet or meters'; 

$tubes = ($tubes); 
    if($knownvolume == TRUE) 
    $tubes = (($knownvolume/$tubecoverage) * ($waste + 1) * 1.05); 
    else 
    $tubes = (((($dia/2) * ($dia/2) * pi())/$tubecoverage) * ($waste + 1) * 1.05); 

$onegal = ($tubes); 
    if($knownvolume == TRUE) 
    $onegal = (($knownvolume/$onegalcoverage) * ($waste + 1) * 1.05); 
    else 
    $onegal = (((($dia/2) * ($dia/2) * pi())/$onegalcoverage) * ($waste + 1) *  1.05); 

$twogal = ($tubes); 
    if($knownvolume == TRUE) 
    $twogal = (($knownvolume/$twogalcoverage) * ($waste + 1) * 1.05); 
    else 
    $twogal = (((($dia/2) * ($dia/2) * pi())/$twogalcoverage) * ($waste + 1) * 1.05); 

$fivegal = ($tubes); 
    if($knownvolume == TRUE) 
    $fivegal = (($knownvolume/$fivegalcoverage) * ($waste + 1) * 1.05); 
    else 
$fivegal = (((($dia/2) * ($dia/2) * pi())/$fivegalcoverage) * ($waste + 1) * 1.05); 

?> 
<form method='post' action=''> 
<table border='0' width='500px' cellpadding='2' cellspacing='1' class="calculator"> 
<tr class="calcheading"><td><label><input type="radio" name="units" 
<?php selected("US")?> value="US" />S.A.E.</label> 
<label><input type="radio" name="units" <?php selected("Metric")?> value="Metric" />Metric</label> </td></tr> 

<tr class="calcheading"><td colspan="2"><strong>Cicular Volume Area</strong></td></tr> 

<tr class="calcrow"><td>Known Volume (<?php echo $measurements ?>):</td><td align="center"><input type='text' name='knownvolume' value="<?php echo $knownvolume ?>"/>  </td></tr> 

<tr class="calcrow2"><td>Dia (<?php echo $measurements ?>):</td><td align="center"><input type='text' name='dia' value="<?php echo $dia ?>"/></td></tr> 

<tr class="calcrow"><td>Length (<?php echo $measurements ?>):</td><td align="center"><input type='text' name='L' value="<?php echo $L ?>"/></td></tr> 

<tr class="calcrow"><td>Waste Variance % (Please add in decimal form):</td><td  align="center"><input type='text' name='waste' value="<?php echo $waste ?>"/></td></tr> 

<tr class="submit"><td colspan="2"><input type='submit' value='Calculate'/></td></tr> 

<tr class="calcrow"> 
<td><i>10.3 oz Tube(s) (CS-1500):</td> 
<td align="center"><input type="text" value="<?php echo round($tubes, 2)?>"/></td></i> 
</tr> 
<tr class="calcrow"> 
<td><i>1 Gallon Bucket(s) (CS-1000):</td> 
<td align="center"><input type="text" value="<?php echo round($onegal, 2)?>"/></td></i> 
</tr> 
<tr class="calcrow"> 
<td><i>2 Gallon Bucket(s) (CS-1800):</td> 
<td align="center"><input type="text" value="<?php echo round($twogal, 2)?>"/></td></i> 
</tr> 
<tr class="calcrow"> 
<td><i>5 Gallon Bucket(s) (CS-1000/CS-1500):</td> 
<td align="center"><input type="text" value="<?php echo round($fivegal, 2)?>"/></td></i> 
</tr> 
</table> 
</form>   
+0

MODX 외부에서 테스트 할 때 정상적으로 작동합니다. – GrayGhost23

답변

1

예상대로 작동하지 않습니다.

Modx의 코드 조각은 순수한 PHP이므로 코드를 구분하기 위해 <?php?>을 여러 개 사용할 수 없습니다. 또한 스 니펫이 캐시되는 방식 때문에 if (!function_exists('nameoffunction') 내의 모든 함수를 래핑해야합니다.

여기 코드 중 일부를 다시 작성했습니다. 아이디어는 html에 필요한 모든 정보가 배열에 저장된다는 것입니다. 나는 이것을 $parse_arr라고 불렀다. 스크립트 맨 아래에서 Modx의 메서드를 사용하여 청크의 모든 자리 표시자를 배열의 값으로 대체합니다.

<?php 
$parse_arr = array(); 


if (!function_exists('selected')) { 
    function selected($val = "") { 
     $units = isset($_POST['units']) ? $_POST['units'] : null; 
     return ($units == $val) ? "CHECKED='CHECKED'" : ""; 
    } 
} 

$units = isset($_POST['units']) ? $_POST['units'] : null; 
$dia = isset($_POST['dia']) ? $_POST['dia'] : null; 
$depth = isset($_POST['depth']) ? $_POST['depth'] : null; 
$L = isset($_POST['L']) ? $_POST['L'] : null; 
$num = isset($_POST['num']) ? $_POST['num'] : null; 
$waste = isset($_POST['waste']) ? $_POST['waste'] : null; 
$knownvolume = isset($_POST['knownvolume']) ? $_POST['knownvolume'] : null; 
$hw = isset($_POST['hw']) ? $_POST['hw'] : null; 
//$denom = (($units == "US") ? 12 : 100); 
$tubecoverage = (($units == "US") ? 18.59 : 304.65); 
$onegalcoverage = (($units == "US") ? 231 : 3785.41); 
$twogalcoverage = (($units == "US") ? 462 : 7470.82); 
$fivegalcoverage = (($units == "US") ? 1155 : 18927.06); 

$measurements = 'in or cm'; 
    if($units == 'US'){ 
    $measurements = 'in'; 
} 
    if($units == 'Metric') 
{ 
    $measurements = 'cm'; 
} 

if($units == 'US') 
    $length = 'feet'; 
    else if($units == 'Metric') 
    $length = 'meters'; 
    else 
    $length = 'feet or meters'; 

$tubes = ($tubes); 
    if($knownvolume == TRUE) 
    $tubes = (($knownvolume/$tubecoverage) * ($waste + 1) * 1.05); 
    else 
    $tubes = (((($dia/2) * ($dia/2) * pi())/$tubecoverage) * ($waste + 1) * 1.05); 

$onegal = ($tubes); 
    if($knownvolume == TRUE) 
    $onegal = (($knownvolume/$onegalcoverage) * ($waste + 1) * 1.05); 
    else 
    $onegal = (((($dia/2) * ($dia/2) * pi())/$onegalcoverage) * ($waste + 1) *  1.05); 

$twogal = ($tubes); 
    if($knownvolume == TRUE) 
    $twogal = (($knownvolume/$twogalcoverage) * ($waste + 1) * 1.05); 
    else 
    $twogal = (((($dia/2) * ($dia/2) * pi())/$twogalcoverage) * ($waste + 1) * 1.05); 

$fivegal = ($tubes); 
    if($knownvolume == TRUE) 
    $fivegal = (($knownvolume/$fivegalcoverage) * ($waste + 1) * 1.05); 
    else 
$fivegal = (((($dia/2) * ($dia/2) * pi())/$fivegalcoverage) * ($waste + 1) * 1.05); 


$parse_arr['selected_us'] = selected("US"); 
$parse_arr['selected_metric'] = selected("Metric"); 
$parse_arr['measurements'] = $measurements; 

$parse_arr['knownvolume'] = $knownvolume; 
$parse_arr['dia'] = $dia; 

// And so on 

return $modx->getChunk('name-of-chunk', $parse_arr, '[[+', ']]'); 

다음은 HTML의 일부입니다. 그것을 청크로 저장하십시오. 이름은 스 니펫의 맨 아래에있는 청크 이름과 동일해야합니다. (이 경우에는 필자의 예에서 이름 덩어리라고 불렀다.)

<form method='post' action=''> 
<table border='0' width='500px' cellpadding='2' cellspacing='1' class="calculator"> 
<tr class="calcheading"><td><label><input type="radio" name="units" [[+selected_us]] value="US" />S.A.E.</label> 
<label><input type="radio" name="units" [[+selected_metric]] value="Metric" />Metric</label> </td></tr> 

<tr class="calcheading"><td colspan="2"><strong>Cicular Volume Area</strong></td></tr> 

<tr class="calcrow"><td>Known Volume [[+measurements]]</td><td align="center"><input type='text' name='knownvolume' value="[[+knownvolume]]"/>  </td></tr> 

<tr class="calcrow2"><td>Dia [[+measurements]]</td><td align="center"><input type='text' name='dia' value="[[+dia]]"/></td></tr> 

아이디어가 있습니다. <?php echo SOMETHING; ?> 대신에 자리 표시 자 [[+name-that-correspond-with-parse-arr-key]]을 사용합니다.

또한이 청크의 하단 근처에서 호출하는 반올림 기능에 대한 스 니펫을 작성해야합니다.

재미있게 보내십시오.

+0

감사합니다. 고맙습니다. 올바른 방향으로 연결해주세요. – GrayGhost23

+0

반환 값 $ parse_arr이 (가) '[+'dia ',' + knownvolume ','+ depth ']]'올바른가? – GrayGhost23

+0

nevermind 나는 그것을 얻었다 고 생각한다 – GrayGhost23

관련 문제