可能这是一个愚蠢的问题,但网站的结构是index.php
,head.php
,footer.php
因此,我在索引页面中添加了head.php
和footer.php
。所有头文都在head.php
现在我想在网站上放置Facebook分享按钮,以便我在head.php
<meta property="og:image:width" content="404">
<meta property="og:image:height" content="404">
<meta property="og:locale" content="bg_BG" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Title of site" />
<meta property="fb:app_id" content="" />
<meta property="og:url" content="URL of the content" />
<meta property="og:image" content="IMAGE HERE" />
<meta property="og:description" content="Description" />
<meta property="og:site_name" content="name" />
我的问题是如何拍摄<meta property="og:image" content="IMAGE HERE" />
,因为每个页面都是用户可以分享的不同图像。
我有代码从中检索数据库中的图像,但是在索引页面中,即<head></head>
部分之下。如果我把
<meta property="og:image" content="http://website.com/image/'.$row['image'].'"/>
它不起作用,因为此时还没有$row['image']
。
更新
好的,这就是我基于@RickJames回答所做的事情。我已经创建了文件 init.php ,我把它放在其中
<?php
$pdo = Database::connect();
if(isset($_GET['image_id']) && is_numeric($_GET['image_id'])){
$image_id = $_GET['image_id'];
$result = $pdo->prepare("SELECT image_name from images WHERE image_id= :image_id ");
$result->bindParam(':image_id', $image_id, PDO::PARAM_INT);
if ($result->execute())
{
$row_name = $result->fetch();
}
}
Database::disconnect();
?>
在我需要的每个页面中,我都将其包含在页面顶部
<?php
include 'misc/database.inc.php';
include 'misc/init.php';
include 'misc/head.php';
?>
// rest of the page
头部:<meta property="og:image" content="<?php echo $row_name['image_name']; ?>"/>
这样我就没有改变页面结构的其余部分。我将按照@Rick的建议将所有查询移出此文件,但现在将这样工作。
@RickJames是可接受的解决方案,因为它现在正在运行?有什么东西我可以改进,还是应该让它像这样?
答案 0 :(得分:3)
创建 init.php
,在所有其他 PHP 页面之前加载,即使在 head.php
在此页面中包含该页面的所有数据库查询,然后在后面的部分中使用它们,例如:您需要 head.php
, index.php
, footer.php
等等。
。
init.php 如下:
<!--- **init.php:** --->
<?php //**init.php:**
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli(
$servername,
$username,
$password,
$dbname
);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql1 = "SELECT image FROM table_name WHERE image_id = " .$_GET["image_id"]
$result1 = $conn->query($sql);
if ($result1->num_rows > 0) {
// output data of first row/image only
$row1 = $result->fetch_assoc());
}
else { echo "result1 has 0 results"; }
$sql2 = "SELECT first_name FROM employees";
$result2 = $conn->query($sql); //use result2 later in code
//with a loop and $row2
if ($result2->num_rows <= 0) {
echo "result2 has 0 results";
}
$conn->close();
?>
。
head.php 如下:
<!--- START **head.php:** --->
<head>
<meta property="og:image:width" content="404">
<meta property="og:image:height" content="404">
<meta property="og:locale" content="bg_BG" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Title of site" />
<meta property="fb:app_id" content="" />
<meta property="og:url" content="URL of the content" />
<meta property="og:image" content="http://website.com/image/<?php echo $row['image']; ?>"/>
<meta property="og:description" content="Description" />
<meta property="og:site_name" content="name" />
</head>
<!--- END **head.php:** --->
。
index.php 如下:
<!--- START **index.php:** --->
<HTML>
include 'init.php';
include 'head.php';
<BODY>
..... blah, blah, blah
</BODY>
include 'footer.php';
</HTML>
答案 1 :(得分:1)
在您使用 header.php 的所有文件中创建一个函数。
<强>的header.php 强>
function meta_og_image() {
//Write your query here, and get only one field like SELECT image FROM table_name
return $row['image'];
}
<强>的index.php 强>
deepWatchData
答案 2 :(得分:1)
不是最好的解决方案,但可以与Jquery一起使用。我没有测试过,但我认为应该没问题。
在页面末尾的index.php
首页中使用它或使用正确的语义,即isset()
等
jQuery(document).ready(function () {
jQuery("meta[property='og\\:image']").attr("content", <?php echo $row['image'];?>);// Note you can place any variable at the place of $row['image'] and it will be applied to the image
});