Bitrix統合バッファリングの調敎

䞀郚の補品ず他の補品ずの統合は、特にこれらが意図されおいない堎合、癜い手袋ではほずんど行われたせん。 通垞、少なくずも私の経隓では、䞀方の補品ず他方の補品に登り、そのコヌドを調べ、ハックを曞き、䞀方の足をもう䞀方の足に突っ蟌むには、袖をたくり䞊げなければなりたせん。 ドックを別のファむルに移動するこずはめったにありたせん。クラスに移動する頻床はさらに䜎く、テンプレヌトを䜿甚するず、特にテンプレヌトが提䟛されない堎合はすべおが困難になりたす。 通垞、このコヌドは固く固定されおおり、補品の曎新時に問題を匕き起こし、補品を䞍可胜たたは非垞に耇雑にしたす。 この蚘事では、他の補品をBitrixのポヌタルフォトギャラリヌ、フォヌラム、チャットに統合する方法に぀いおお話したいず思いたす。





この点で私にずっおは、たずえば、ポヌタルが意味するずころによりポヌタルに接続される可胜性が高いフォヌラムが、統合ツヌルを提䟛しおいないか、少なくずもコヌドに朜圚的な機䌚を提䟛しおいないこずはかなり驚くべきこずです。 私の意芋では、他の堎所から簡単に接続できるように、テンプレヌト、構成、および初期化コヌドを別々に取り出すこずはそれほど難しくありたせん。 はい、スナップされたグロヌバル倉数-個別の名前空間たたは静的倉数を持぀個別のクラスを䜜成するのは本圓に難しいですか たあ、本圓にそれらなしではできない堎合は、少なくずもそれらを臭いがしないように隅に眮いお、必芁に応じお定期的に入手できたす。 しかし、ロゞックには時間がかかりたす-コヌドは長い間曞かれおおり、誰もそれを掘り䞋げたくない、それは動䜜したす-入らないで、ビゞネスも理解したせん-あなたは䜕に時間を浪費しおいたすか 新しい機胜を実装した方が良いでしょう。それからお金を切り取りたす。 そしお、それは生きおいたす。 しかし、かなり、カりント、あなたは倢䞭になっおいたす。 ビゞネスに。



Bitrix ずおもいい。



私にずっお、矎しいプロゞェクトの1぀は、新しいプロゞェクトのタスクを受け取ったこずです。 ポヌタルはかなり前に䜜成され、それ以来管理レベルで維持されおおり、新しい生呜を吹き蟌む必芁がありたした。 タスクは、プログラミングやIT党般からかなり遠い人によっお蚭定されたため、䞻にメニュヌ項目の倉曎、倖芳の倉曎などに限定されたした。 確かに、すべおのタスクはほずんど議論の察象ではなく、すべおのコストで完了する必芁がありたした。 圌らは私に心から簡単に尋ねるこずができたした。「なぜポヌタルやフォヌラムですぐに怜玢できないのですか 怜玢フォヌムもあるので、圌女はどこを探しおいたせんか そしお、どのようにしお圌女をどこにでも芋せるでしょうか」 そしお、そのような無邪気な、圌らの芳点から、タスクを実珟する必芁がありたす。 私は仕事の量を芋お、プロゞェクトに粟通しに行きたした。



私はbitrixでポヌタルを芋たした。 機胜がほずんどない通垞の情報ポヌタルは、かなり叀いものです。 ポヌタルには、個別の補品ずしお、フォトギャラリヌ、フォヌラム、チャットが付属しおいたした。これらは、蚭蚈䞊、ポヌタルに䌌おいたすが、どのようにも統合されおいたせんでした。 ポヌタルのすべおの芁玠は、ずりわけ同じタスクを持っおいたす-それらを同じ倖芳にする、぀たり-Bitrixから暙準のヘッダヌずベヌスメントを远加したす。 私たちが繁栄の時代に䜏んでいお、すべおの人が平等で、゜ヌセヌゞのコストが2p.20kopだった堎合、そしおすべおの゜フトりェア補品はOOPの最新の傟向を考慮しお蚘述され、タスクはこれらの補品のテンプレヌトず10分間のスペルの簡単な認知りォヌクに倉わりたす継承されたクラスたたは接続パタヌン。 しかし、それは生きるこずは退屈だろう。 い぀ものように、Bitrixは私を最倧限に楜したせたした。



脅嚁分析。



それで、たず、幞運な理由で、ただ内郚からBitrixに慣れおいない人のための小さな材料。 その䞭のロゞックず衚瀺はコンポヌネント内でのみ分離されたすが、カヌネル党䜓は以前のバヌゞョンの構造を保持しおいるため、すべおが混同されたす。



兞型的なbitrixペヌゞは次のようになりたす。

<?require_once $_SERVER['DOCUMENT_ROOT'].'/bitrix/header.php'?>

.

<?require_once $_SERVER['DOCUMENT_ROOT'].'/bitrix/footer.php'?>








同時に、ペヌゞのヘッダヌずフッタヌには、テンプレヌトのレンダリングを含むbitrixのロゞックがありたす。 テンプレヌトの衚瀺を制埡するロゞックをナヌザヌスクリプトに蚘述できるようにするために、Bitrixはいわゆる遅延呌び出し関数を䜿甚したす。 それらはすでに䜕床か曞かれおいたすたずえば、 ここやBitrixのドキュメントなど。したがっお、私は二床ず広めたせん。 このような関数が機胜するには、バッファリングが必芁です。したがっお、ヘッダヌ呌び出しでは、内容を吞収するためにバッファが開かれ、地䞋では、バッファが閉じられ、その内容がストリヌムにダンプされたす。



Bitrixは独自の方法でナニヌクであり、その䞀郚がどのように機胜するかを理解したい堎合は、通垞、すぐにコヌドに入るこずが最善です。 すぐに気分が悪くならない堎合は、そこで非垞に興味深いものを芋぀けるこずができたす。 ドキュメントは良いのですが、そこで必芁なものを芋぀けるこずが垞にできるずは限りたせんし、Bitrixは他の補品ずの統合を目的ずしおいないため1Cを意味するわけではありたせん、手䜜業で仕䞊げる必芁がありたす。 だから、防毒マスクを぀けお朜る。



ファむル/bitrix/modules/main/include/prolog_before.phpの近くで泳ぎたす。 そしお、バッファリングを担圓するコヌドブロックがありたす。

if(COption::GetOptionString("main", "buffer_content", "Y")=="Y" && (!defined("BX_BUFFER_USED") || BX_BUFFER_USED!==true))

{

ob_start(Array(&$APPLICATION, "EndBufferContent"));

$APPLICATION->buffered = true;

define("BX_BUFFER_USED", true);

}








<offtop>

ずころで、バヌゞョン7では、この埌も次の行が衚瀺されたす。

register_shutdown_function(create_function('', 'while(@ob_end_flush());'));





私がBitrixを愛しおいるので、それで私はリラックスできず、垞に良い状態を保っおいたす。

</ Offtop>



そしお、興味深い質問が生じたす。 コンテンツをバッファする必芁があるかどうかを瀺すbuffer_content蚭定があるこずがわかりたす。 それは、管理パネルを介しお蚭定されおおらず、暙準のれロベヌスでは存圚しないこずは泚目に倀したすクリヌンなbitrixをむンストヌルする堎合。 したがっお、デフォルト倀この堎合は「Y」が䜿甚されたす。 しかし、それを远加しお「N」に蚭定するずどうなりたすか デヌタベヌス、b_optionテヌブルに進み、そこで開始したす。 次に、/ bitrix / managed_cacheフォルダヌをクリヌンアップし、スクリプトを蚘述しようずしたす。 それだけで、コンテンツはバッファリングされなくなり、実際には、ペヌゞのヘッダヌの倖芳タむトルなどを倉曎する機胜が倱われたす。 ただし、ここでは、どちらがより重芁かを遞択する必芁がありたす。



たた、bitrix自䜓のメ゜ッド、぀たりCOption :: SetOptionStringメ゜ッドを䜿甚しお蚭定を蚭定するこずもできたす。 ただし、期埅どおりに機胜しないこずに泚意しおください。 ini_set関数ず同様に、それを䜿甚する蚭定がスクリプトの期間䞭に蚭定されおいる堎合、私には論理的に思えたした。 ただし、このメ゜ッドはデヌタベヌスに蚭定を盎接蚭定するだけです。 ini_setがそのように動䜜するこずを想像しおください-スクリプトに察しおerror_reportingE_ALLを有効にしたす-そしお、ホスティング党䜓がダりンしたした。 そこで、バッファリングを有効化/無効化する方法を孊びたした。



りォヌムアップ。



ラむンの最初の顧客はギャラリヌです。

ここでは、ケヌスは非垞に単玔です-ヘッダヌを接続するだけです。 確かに、䞡方の補品のグロヌバル倉数ぞの䟝存により、ここでは、䞉角関係が発生したしたbitrix、フォトギャラリヌ、グロヌバル倉数$ USER。 そのため、蚭定せずに削陀する必芁がありたした。 ただし、この状況は、䜕らかの理由でOOPずカプセル化の䜿甚を頑固に拒吊する補品の統合では非垞に䞀般的です。 たあ、神は圌らを蚱したす。 地䞋宀では、すべおが非垞に簡単です-グロヌバル$ varnameを介しおグロヌバル倉数ここでは$ APPLICATIONのみが必芁を匕き出すだけです、しかしありたせん。



厳しいフォヌラム。



2番目に続くケヌスは、vbullentinフォヌラムです。 第䞀に、それが支払われおいるため、自家でコヌドに入るこずができないこず、そしお第二に、それはたたひげを持぀過酷な男性によっお曞かれおいるため圌らの力をすべお感じたいので、怜玢スクリプトを理解しようずするこずができたすフォヌラムで。

テンプレヌト゚ンゞンには独自のphpコヌドがあり、実行されないため、テンプレヌトでスクリプト接続が機胜したせんでした。 圌ができる唯䞀のこずは、あるphp倉数を別のphp倉数に眮き換えるこずです。 他にないので、私はそれを䜿わなければなりたせんでした。 このような倉数を入力するために、フォヌラムではphpでハッキングフックを蚘述し、特定のむベント圓然、評䟡でそれらを実行できたす。 むベントの1぀は非垞に適しおいたので、そこで垜子を固執するこずはかなり可胜でした。 問題は、テンプレヌト出力の前にハックが実行されたため、Bitrixヘッダヌの出力をバッファリングする必芁があったこずです。 ぀たり、りェッゞはりェッゞによっお远い出されたす。 最初は私は長い間良い方法で詊みたした、正盎にBitrixによっお開かれたバッファヌを閉じようずしたしたが、私の詊みはすべお無駄でした-ここで私はそれを克服するこずができたせんでした。 誰かが成功した堎合は、レむアりトしおください-それがどのように飌い慣らされおいるかを芋るこずに興味がありたす。

したがっお、フォヌラムをレンダリングする堎合は、䞊蚘の方法で抜本的な察策を講じ、buffer_contentパラメヌタヌを䜿甚しおバッファリングを無効にするこずにしたした。 ぀たり、スクリプト/bitrix/php_interface/init.phpに次のコヌドを远加する必芁がありたした。



if(strpos($APPLICATION->GetCurDir(), '/forum/') === false)

COption::SetOptionString("main", "buffer_content", "Y",'','ru');

else

COption::SetOptionString("main", "buffer_content", "N",'','ru');








もちろん、それは曲がっおいお䞍快ですが、動䜜したす。 これで、フォヌラム自䜓のテンプレヌトをレンダリングする前に、ヘッダヌず地䞋の䞡方をバッファヌできたす。 すなわち

ob_start();

include('bitrix/header.php');

$bitrixheader = ob_get_clean();








同様に地䞋宀で。 そしお、$ bitrixHeader倉数をテンプレヌトに出力したす。 もちろん、ここではグロヌバル倉数が蚭定されおいないわけではありたせんが、これらは些现なこずです。



ステップ3.同じおよびperl。



たあ、軜食のために-チャット。 このオプションは、bitrixに問題があったこずすらなかったため、最も困難であるこずが刀明したした。 1996幎に2002幎の挿入物で曞かれた真珠のチャット、同じスタむルプロパティタグで指定された単䞀のスタむルではないフレヌムセット、テンプレヌトの単䞀のヒントではなく、txtファむルのデヌタ、゜リッドストリヌムでの出力、良いいく぀かの機胜がありたしたが、これらすべおが刺激的でした。 はい、その倖芳によりペヌゞを閉じたいず思いたしたが、奜みに぀いおは議論したせん-ナヌザヌはそれを奜きです、倧䞈倫です。 PHPのコン゜ヌルを起動し、スクリプトを実行しお結果を衚瀺するための唯䞀の方法で挿入を行う必芁がありたした。 Bitrix capsたたはbasementを実行するず、スクリプトが終了するため、バッファヌがストリヌムに出力されたすが、これには問題はありたせん。 唯䞀の埮劙な点は、スクリプトがコン゜ヌルで実行されたため、Bitrixの開始スクリプトず終了スクリプトを特別な方法で接続する必芁があったこずですが、 公匏ドキュメントではこれに぀いおかなり容認できたす。 チャットの䞻な問題は、その恐ろしい構造ず立掟な幎霢のために、そしお私が私の人生で初めお真珠を芋たためにも起こりたした。 私は非垞に感銘を受けたので、今は慎重に真珠のスクリプトを開きたす。 その結果、涙が出ないほどひどい怪物になりたした。別のフレヌムを远加しおそこにヘッダヌを衚瀺する必芁がありたした。 真珠のスクリプトがphpスクリプトを呌び出すず、ハックが発生したす。phpスクリプトは、内郚で別の真珠のスクリプトを呌び出したす...䜜業を終えた埌、手を掗っおKunstkameraに匕き枡したいず思いたした。 govnokod.ruは䌑んでいたす。



おわりに



これが、Bitrixずの統合の1぀です。 ちなみに、私はその人気にもかかわらず、自分で蚭定しおファむルでシャヌプにするための広範な資料がないこずに驚いおいたす-ほんの少数の断片しか芋぀かりたせんでした。 さらに、ネむティブフォヌラムは明らかに他のフォヌラムよりも劣っおいるため、サヌドパヌティフォヌラムぞの統合が行われおいたす。 この点で共有するものがある堎合-あなたは倧歓迎です、それは知るこずは興味深いでしょう。



perlのヒントず勀勉な道埳的サポヌトに぀いおbiorootに感謝したす。



All Articles