-2

レシピを保存するウェブサイトを作成しています。レシピスケーラーを作りたいと思っています。希望のサービングを入力すると、スクリプトがレシピの材料をそれに合わせて変換します。簡単に金額を変更できますが、単位を変換する方法を模索しています。これで、1500のif / thenステートメントを入力できることがわかりましたが、もう少し簡単にしようとしています。:)

TastyKitchenというサイトを見ていました。彼らはAJAXを介してこのファイル(http://tastykitchen.com/recipes/wp-admin/admin-ajax.php)にサービングをPOSTし、そのファイルは材料を返します。次に、それらをページに表示します。例については、http://tastykitchen.com/recipes/breads/plain-bagels/にアクセスしてください。

私は本当に私が得ることができるどんな助けにも感謝します。

ありがとう!

4

2 に答える 2

1

私の提案は、データベースに1つのサーブを保存してから、ページでフィードしたい人数を単純に乗算することです。

したがって、ユーザーが4人分の食事を作りたいと選択した場合は、変数(セッション、Cookieなど)を保持します。$peepsこの例ではそれを呼び出します。データを出力するときは、次のようにします。

Echo "This will make $peeps portions:";
Echo "Ingredients:<br>";
Echo ($peeps*Ingredient1Quantity)." - ".$ingredient1Name."<br>";
Echo ($peeps*Ingredient2Quantity)." - ".$ingredient2Name."<br>";

等々。

サイトをインペリアルからメートル法に変換したい場合は、簡単な関数で簡単に変換できます。

すべてのデータをメートル法でデータベース(またはインペリアル、ただしすべて同じタイプ)に格納する場合、ユーザーの好みに基づいて同様の方法で変換することにより、簡単に出力できます。

// Assumes a function that converts to Imperial from Metric called convertToImperial()
Echo "This will make $peeps portions:";v
Echo "Ingredients:<br>";
Echo convertToImperial($peeps*Ingredient1Quantity)." - ".$ingredient1Name."<br>";
Echo convertToImperial($peeps*Ingredient2Quantity)." - ".$ingredient2Name."<br>";

編集:すべてをメートル法でデータベースに保存すると、関数にデータを最高のインペリアル測定で返すことができます。

// For example, input is passed as 
// $qty=30 (ml) 
// $serves is passed as 3 (ie, three people)
// $type is passed as liquid.

function convertToImperial($qty, $serves, $type)
{
    // Metric to Imperial will need a $type passed (Liquid, Weight, Other).
    // You can use a switch statement to pass between the different types.
    switch ($type)
    {
         case "Liquid":
             // Assumes 5ml is a teaspoon
             // Assumes 15ml is a tablespoon
             // Assumes 250ml is a cup.
             $CalMeasure=$qty*$serves; // Now at 90ml.
             // Here you can now choose to either pick the best match
             // ie, measurement with least remainder/exact measure
             // which in this case would be 6 tablespoons
             // or
             // switch measurement types after a certain quantity is reached.
             if ($CalMeasure>125) // Half a cup
             {
                 return (round($CalMeasure/250,2)." cups");
             }
             elseif ($CalMeasure>15) // tablespoons
             {
                 return (round($CalMeasure/15,2)." Tablespoons");
             }
             else
             {
                 return (round($CalMeasure/5,2)." Teaspoons");
             }
             break;
         case "Weight":
             // Similar approach to Weights, Convert Grams to Pounds and the like.
             return $WeightMeasured;
             break;
         default: // assumes Other (pinches, sprinkles etc
             // Similar approach again.
             break;
}
于 2012-08-27T00:17:16.810 に答える
1

@Caleb-Fluffehは、すべてを1つのタイプの測定値に格納し、それらを他の測定値に変換する一連の関数を使用するという戦略を立てています。私は、とりわけレシピのスケーリングを行うWebアプリケーションhttps://Gredio.comを構築し、この方法で非常に柔軟なレポートを作成することができました。もう1つの問題は、液体の測定値と重量の関係です。大規模な食料生産は常に重量で行われますが、小さな人は時々違いを誤解します。液体から重量への変換をプログラムで行うことは、液体の重量が大きく変化することを知る必要があるため、複雑になる可能性があります(蜂蜜と水を考えてください...)

于 2013-10-15T23:39:51.977 に答える