📄 demo-zend.php.txt
字号:
<?php/* Load the Zend Gdata classes. */set_include_path(dirname(__FILE__) . '/ZendGdata-0.9.3/library');require_once 'Zend/Loader.php';Zend_Loader::loadClass('Zend_Feed_EntryAtom');Zend_Loader::loadClass('Zend_Gdata');Zend_Loader::loadClass('Zend_Gdata_AuthSub');/* Register namespaces for Google Base ('g') and batch requests ('batch'). */Zend_Feed::registerNamespace('g', 'http://base.google.com/ns/1.0');Zend_Feed::registerNamespace('batch', 'http://schemas.google.com/gdata/batch');/* The items feed URL, used for queries, insertions and batch commands. */$itemsFeedURL = "http://www.google.com/base/feeds/items";/* Types of cuisine the user may select when inserting a recipe. */$cuisines = array('African', 'American', 'Asian', 'Caribbean', 'Chinese', 'French', 'Greek', 'Indian', 'Italian', 'Japanese', 'Jewish', 'Mediterranean', 'Mexican', 'Middle Eastern', 'Moroccan', 'North American', 'Spanish', 'Thai', 'Vietnamese', 'Other');function createOrEditEntry($entry) { $newEntry = $entry; $newEntry->category['scheme'] = 'http://base.google.com/categories/itemtypes'; $newEntry->category['term'] = 'Recipes'; $newEntry->title['type'] = 'text'; $newEntry->title = $_POST['recipe_title']; $newEntry->{'g:cuisine'} = $_POST['cuisine']; $newEntry->{'g:item_type'} = 'Recipes'; $newEntry->{'g:item_type'}['type'] = 'text'; $newEntry->{'g:cooking_time'} = $_POST['time_val'] . ' ' . $_POST['time_units']; $newEntry->{'g:cooking_time'}['type'] = 'intUnit'; $newEntry->{'g:main_ingredient'} = $_POST['main_ingredient']; $newEntry->{'g:main_ingredient'}['type'] = 'text'; $newEntry->{'g:serving_count'} = $_POST['serves']; $newEntry->{'g:serving_count'}['type'] = 'number'; $newEntry->content = $_POST['recipe_text']; return $newEntry;}/** * Creates the Zend_Feed_EntryAtom used to insert a new recipe. */function buildNewEntry() { return createOrEditEntry(new Zend_Feed_EntryAtom());}function buildUpdatedEntry($entry) { return createOrEditEntry($entry);}/** * Creates the XML content used to perform a batch delete. */function buildBatchXML() { $counter = 0; $result = '<?xml version="1.0" encoding="UTF-8"?>' . "\n"; $result .= '<feed xmlns="http://www.w3.org/2005/Atom"' . "\n"; $result .= ' xmlns:g="http://base.google.com/ns/1.0"' . "\n"; $result .= ' xmlns:batch="http://schemas.google.com/gdata/batch">' . "\n"; foreach($_POST as $key => $value) { if (substr($key, 0, 5) == "link_") { $counter++; $newEntry = new Zend_Feed_EntryAtom(); $newEntry->{'id'} = $value; $newEntry->{'batch:operation'}['type'] = 'delete'; $newEntry->{'batch:id'} = $counter; $result .= $newEntry->saveXMLFragment(); } } $result .= '</feed>' . "\n"; return $result;}/** * Exchanges the given single-use token for a session * token using AuthSubSessionToken, and returns the result. */function exchangeToken($token) { return Zend_Gdata_AuthSub::getAuthSubSessionToken($token);}/** * Inserts a new recipe by performing an HTTP POST to the * items feed. */function postItem() { global $itemsFeedURL; $client = Zend_Gdata_AuthSub::getHttpClient($_POST['token']); $gdata = new Zend_Gdata($client); $response = $gdata->post(buildNewEntry()->saveXML(), $itemsFeedURL); return $response;}/** * Updates an existing recipe by performing an HTTP PUT * on its feed URI, using the updated values a PUT data. */function updateItem() { global $itemsFeedURL; $client = Zend_Gdata_AuthSub::getHttpClient($_POST['token']); $gdata = new Zend_Gdata($client); $feed = $gdata->getFeed($itemsFeedURL . "?"); foreach ($feed as $feed_entry) { if ($feed_entry->link('edit') == $_POST['link']) { $updatedEntry = buildUpdatedEntry($feed_entry); $updatedEntry->save(); return true; } }}/** * Deletes a recipe by performing an HTTP DELETE (a custom * cURL request) on its feed URI. */function deleteItem() { $client = Zend_Gdata_AuthSub::getHttpClient($_POST['token']); $gdata = new Zend_Gdata($client); $gdata->delete($_POST['link']);}/** * Deletes all recipes by performing an HTTP POST to the * batch URI. */function batchDelete() { global $itemsFeedURL; $client = Zend_Gdata_AuthSub::getHttpClient($_POST['token']); $gdata = new Zend_Gdata($client); $response = $gdata->post(buildBatchXML(), $itemsFeedURL . "/batch"); return $response;}/** * We arrive here when the user first comes to the form. The first step is * to have them get a single-use token. */function showIntroPage() { global $itemsFeedURL; $next_url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; $redirect_url = Zend_Gdata_AuthSub::getAuthSubTokenUri($next_url, $itemsFeedURL, 0,1); print '<html>' . "\n"; print '<head><title>PHP Demo: Google Base API</title>' . "\n"; print '<link rel="stylesheet" type="text/css" href="../../../css/dev_docs.css">' . "\n"; print '</head>' . "\n"; print '<body><center>' . "\n"; print '<table style="width:50%;">' . "\n"; print '<tr>' . "\n"; print '<th colspan="2" style="text-align:center;">PHP Demo: Google Base data API' . '<br><font size=-1><span style="font-variant: small-caps;">Powered By</span>' . ' <a href="http://framework.zend.com/download/gdata">' . 'Zend Google Data Client Library</a></font></th>' . "\n"; print '</tr>' . "\n"; print '<tr><td>Before you get started, please <a href="' . $redirect_url . '">sign in</a> to your personal Google Base account.</td></tr>' . "\n"; print '</table>' . "\n"; print '</center></body></html>' . "\n";}/** * Prints the table of recipes the user has already entered * on the left-hand side of the page. */function showRecipeListPane($token) { print '<td style="width:50%; text-align:center; vertical-align:top">' . "\n"; print '<table>' . "\n"; print '<tr><th colspan="5" style="text-align:center">Recipes you have added</th></tr>' . "\n"; global $itemsFeedURL; $client = Zend_Gdata_AuthSub::getHttpClient($token); $gdata = new Zend_Gdata($client); try { $feed = $gdata->getFeed($itemsFeedURL . "?"); if ($feed->count() == 0) { print '<tr><td colspan="5" style="text-align:center"><i>(none)</i></td></tr>' . "\n"; } else { print '<tr>' . "\n"; print '<td style="text-align:center"><i>Name</i></td>' . "\n"; print '<td style="text-align:center"><i>Cuisine</i></td>' . "\n"; print '<td style="text-align:center"><i>Serves</i></td>' . "\n"; print '<td colspan="2" style="text-align:center"><i>Actions</i></td>' . "\n"; print '</tr>' . "\n"; foreach ($feed as $feed_entry) { $link_list = $feed_entry->link(); $href = $link_list[0]->getAttribute('href'); print "<tr>\n"; print '<td align="left" valign="top"><b><a href="' . $href . '">' . $feed_entry->title() . '</a></b></td>' . "\n"; print '<td style="text-align:center;vertical-align:top">' . $feed_entry->cuisine() . '</td>' . "\n"; print '<td style="text-align:center;vertical-align:top">' . $feed_entry->serving_count() . '</td>' . "\n"; /* Create an Edit button for each existing recipe. */ print '<td style="text-align:center;vertical-align:top">' . "\n"; print '<form method="post" action="' . $_SERVER[PHP_SELF] . '" style="margin-top:0;margin-bottom:0;">' . "\n"; print '<input type="hidden" name="action" value="edit">' . "\n"; print '<input type="hidden" name="token" value="' . $token . '">' . "\n"; print '<input type="hidden" name="edit" value="' . $feed_entry->id() . '">' . "\n"; print '<input type="submit" value="Edit">' . "\n"; print '</form>' . "\n"; print '</td>' . "\n"; /* Create a Delete button for each existing recipe. */ print '<td style="text-align:center; vertical-align:top">' . "\n"; print '<form method="post" action="' . $_SERVER[PHP_SELF] . '" style="margin-top:0;margin-bottom:0;">' . "\n"; print '<input type="hidden" name="action" value="delete">' . "\n"; print '<input type="hidden" name="token" value="' . $token . '">' . "\n"; print '<input type="hidden" name="link" value="' . $feed_entry->id() . '">' . "\n"; print '<input type="submit" value="Delete">' . "\n"; print '</form>' . "\n"; print '</td>' . "\n"; print '</tr>' . "\n"; } } /* Create a "Delete all" button" to demonstrate batch requests. */ print '<tr><td colspan="5" style="text-align:center">' . "\n"; print '<form method="post" action="' . $_SERVER[PHP_SELF] . '" style="margin-top:0;margin-bottom:0">' . "\n"; print '<input type="hidden" name="action" value="delete_all">' . "\n"; print '<input type="hidden" name="token" value="' . $token . '">' . "\n"; $i = 0; foreach ($feed as $feed_entry) { print '<input type="hidden" name="link_' . $i . '" value="' . $feed_entry->id() . '">' . "\n"; $i++; } print '<input type="submit" value="Delete All"'; if ($feed->count() == 0) { print ' disabled="true"'; } print '></form></td></tr>' . "\n"; print '</table>' . "\n"; print '</td>' . "\n"; } catch (Exception $e) { showMainMenu("Error: " . $e->getMessage(), $token); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -