私のサイトMy Equipmentを開発していますが、先日悲劇がありましたが、データベースは落ちました。
一部のコミュニティメンバーはすでに同様の経験をしています。 そして、判明したように、私のホスティング業者はバックアップを作成しませんが、私はそれらを持っていませんでした。 そのため、検索エンジンのキャッシュから2か月間トピックを取得する必要がありました。
それで、私は以前にエンジンコードに深く入り込んでいないので、同時に彼に会うことにしました。
私の前のタスクは次のとおりです。
1)キャッシュに保存されているページのYandex検索結果を取得して解析する
2)Yandexキャッシュに保存されているページのテキストのコンテンツを解析する
3)ページのコンテンツをデータベースに保存すると同時に、ページの古いURLを復元して、ユーザーと検索エンジンが古いアドレスでそれらを見つけるようにします。
さて、これまでのところ、すべてがシンプルで明確です。 独自のモジュールを作成する例を開いたので、書き始めました。
私が最初に決めたのは、指定された識別子でページを保存する方法を確認することでした。 そのような機能はありませんでした。 次に、ソースを修正することにしました。 コードが開いていることを神に感謝します。 私はこの指示に従って、Livestreetバージョン0.3をこのバージョンのエンジンに使用します。
1)トピックモジュールに移動します(クラス\モジュール\トピック\ Topic.class.php)
AddTopic関数の宣言を見つけました。44行目です。
public function AddTopic(TopicEntity_Topic $oTopic)
に変更
public function AddTopic(TopicEntity_Topic $oTopic,$needId=null)
指定された識別子を持つレコードを挿入することが可能であること
2)トピックのモジュールマッパーを少し変更する必要があります(クラス\モジュール\トピック\マッパー\ Topic.mapper.class.php)
AddTopic関数を探しています(44行あります)
public function AddTopic(TopicEntity_Topic $oTopic) {
$sql = "INSERT INTO ".DB_TABLE_TOPIC."
(blog_id,
user_id,
topic_type,
topic_title,
topic_tags,
topic_date_add,
topic_user_ip,
topic_publish,
topic_publish_draft,
topic_publish_index,
topic_cut_text,
topic_forbid_comment,
topic_text_hash
)
VALUES(?d, ?d, ?, ?, ?, ?, ?, ?d, ?d, ?d, ?, ?, ?)
";
if ($iId=$this->oDb->query($sql,$oTopic->getBlogId(),$oTopic->getUserId(),$oTopic->getType(),$oTopic->getTitle(),
$oTopic->getTags(),$oTopic->getDateAdd(),$oTopic->getUserIp(),$oTopic->getPublish(),$oTopic->getPublishDraft(),$oTopic->getPublishIndex(),$oTopic->getCutText(),$oTopic->getForbidComment(),$oTopic->getTextHash()))
{
$oTopic->setId($iId);
$this->AddTopicContent($oTopic);
return $iId;
}
return false;
}
に変更する
public function AddTopic(TopicEntity_Topic $oTopic,$needId=null) {
if($needId==null)
{
$sql = "INSERT INTO ".DB_TABLE_TOPIC."
(blog_id,
user_id,
topic_type,
topic_title,
topic_tags,
topic_date_add,
topic_user_ip,
topic_publish,
topic_publish_draft,
topic_publish_index,
topic_cut_text,
topic_forbid_comment,
topic_text_hash
)
VALUES(?d, ?d, ?, ?, ?, ?, ?, ?d, ?d, ?d, ?, ?, ?)
";
if ($iId=$this->oDb->query($sql,$oTopic->getBlogId(),$oTopic->getUserId(),$oTopic->getType(),$oTopic->getTitle(),
$oTopic->getTags(),$oTopic->getDateAdd(),$oTopic->getUserIp(),$oTopic->getPublish(),$oTopic->getPublishDraft(),$oTopic->getPublishIndex(),$oTopic->getCutText(),$oTopic->getForbidComment(),$oTopic->getTextHash()))
{
$oTopic->setId($iId);
$this->AddTopicContent($oTopic);
return $iId;
}
}else
{
$sql="select count(*) as cnt from ".DB_TABLE_TOPIC." where topic_id='".$needId."'";
$aRow=$this->oDb->query($sql);
//echo $needId;
//print_r($aRow);
if($aRow[0]['cnt']>0)
{
return false;
}
$sql = "INSERT INTO ".DB_TABLE_TOPIC."
(blog_id,
user_id,
topic_type,
topic_title,
topic_tags,
topic_date_add,
topic_user_ip,
topic_publish,
topic_publish_draft,
topic_publish_index,
topic_cut_text,
topic_forbid_comment,
topic_text_hash,
topic_id
)
VALUES(?d, ?d, ?, ?, ?, ?, ?, ?d, ?d, ?d, ?, ?, ?,?d)
";
if ($iId=$this->oDb->query($sql,$oTopic->getBlogId(),$oTopic->getUserId(),$oTopic->getType(),$oTopic->getTitle(),
$oTopic->getTags(),$oTopic->getDateAdd(),$oTopic->getUserIp(),$oTopic->getPublish(),$oTopic->getPublishDraft(),$oTopic->getPublishIndex(),$oTopic->getCutText(),$oTopic->getForbidComment(),$oTopic->getTextHash(),$needId))
{
$oTopic->setId($needId);
$this->AddTopicContent($oTopic);
return $needId;
}
}
return false;
}
3)ファイルクラス\モジュール\トピック\ Topic.class.php AddTopicの関数に戻る
そしてその最初の行を変更します
if ($sId=$this->oMapperTopic->AddTopic($oTopic)) {
に
if ($sId=$this->oMapperTopic->AddTopic($oTopic,$needId)) {
これで、目的の識別子を持つトピックを挿入できるようになりました。同じ識別子を持つエントリがデータベースにある場合、上書きされません。
これで、モジュールをインストールする準備ができました。 モジュールがローカライズされておらず、すべてのテキストがテンプレートに直接縫い付けられていることにすぐに注意したいです。 また、Yandexの注目を集めないように非常に長い時間機能しますが、これはカスタマイズ可能です。
それをインストールするには:
1) こちらからダウンロードしてください
2)ダウンロードしたアーカイブからreadmeファイルを読みます。
3)モジュールをインストールし、失われたトピックを回復します。
可能であれば、彼は検索エンジンのキャッシュにあるすべてのトピックを取得します。 カットを配置し、希望の日付、ブログとユーザーの名前を設定します。 このモジュールが機能するには、curl、mb_string、iconvが必要です。 私だけでなく役に立つことを願っています。 ご清聴ありがとうございました。