我试图能够使用 Pin It 按钮,但它不会自动从页面获取 URL 和图像。如何使用 PHP 动态填充按钮?
有点像这个例子,但没有使用 Genesis 框架。
我还想构建一个动态填充的 Pinterest 按钮,所以我把它放在一起。它利用simpleHTMLDom 解析器来获取页面上的第一个图像(用于图像)和页面上的第一段(用于描述)。可以修改这些选择器以获取正确的图像/文本。有关更多信息,请参阅simpleHTMLDom 文档。
<?php
// Include our dom parser
include('simple_html_dom.php');
// Get the current page URL
function curPageURL() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}
$thispage = curPageURL();
// Grab our data
$html = file_get_html($thispage);
$imgtag = $html->find('img', 0)->src;
$desc = $html->find('p', 0)->plaintext;
// Build the URL
$pinURL = 'http://pinterest.com/pin/create/button/?url=' . $thispage . '&media=' . $imgtag . '&description=' . $desc . '';
$html->clear();
unset($html);
?>
现在我们只需在按钮链接中回显该新 URL。
<a href="<?php echo $pinURL ?>" class="pin-it-button" count-layout="horizontal">Pin It</a>
<script type="text/javascript" src="http://assets.pinterest.com/js/pinit.js"></script>
这是从 Pinterest 为 Pin It 按钮创建的代码。
注意包含 php 标签。将您自己的 php 代码放入其中以填充 url、媒体和描述参数。完毕。
<a href="http://pinterest.com/pin/create/button/?url=<?php echo url_php_function(); ?>&media=<?php echo media_php_function(); ?>&description=<?php echo description_php_function(); ?>" class="pin-it-button" count-layout="horizontal">Pin It</a>
查看http://pinterest.com/about/goodies/似乎他们正在对 URL 进行编码,或者至少将 '://' 替换为 '%3A%2F%2F' 但上面的示例都没有遵循这种模式,也不是使用 urlencode。
我想一些试验和错误是为了我。
这是来自新闻聚合器中的特征方法的代码片段。如果我可以找到带有 simpleHTMLDom 的图像,则精选帖子会获得 Pin It 按钮。
// Pinterest
/*
Pinterest requires two bits of code, something like this:
<a href="http://pinterest.com/pin/create/button/?url=http%3A%2F%2Fwww.muschamp.ca%2F&media=http%3A%2F%2Fwww.muschamp.ca%2Fimage.jpg&description=whatever" class="pin-it-button" count-layout="horizontal"><img border="0" src="//assets.pinterest.com/images/PinExt.png" title="Pin It" /></a>
Where you want the button ie here, and
<script type="text/javascript" src="//assets.pinterest.com/js/pinit.js"></script>
directly after the body tag just like Facebook's new style button
*/
// I definitely miss how I did things in my previous code base, if there is no image should not be able to pin...
if(($image != NULL) && ( ! strpos($image->src, '+')) && ( ! strpos($image->src, '%'))
&& (preg_match('|^http?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $image->src)))
{
// If I don't display a valid image, no sense in showing a Pin It button
$html .= '<li>'; // Opening <li>
// May want a more elaborate description...
$html .= '<a href="http://pinterest.com/pin/create/button/?url=' . $item->get_permalink() . '&media=' . $image->src . '&description=' . $item->get_title() . '" class="pin-it-button" count-layout="horizontal"><img border="0" src="//assets.pinterest.com/images/PinExt.png" title="Pin It" /></a></li>';
}
如果在测试中证明有必要进行详细说明,因为某些有效的 URL 可能不会被 Pinterest 的 JavaScript 接受为有效,至少这是我在测试中发现的。看来'%' 和'+' 字符特别麻烦。Pinterest 不会让你固定小图像甚至是非常大的图像,但由于我也使用 PHP 来调整我的新闻聚合器中的图像大小,所以我不在这里进行测试,但在将 Pinterest 添加到你的应用。