Location: PHPKode > scripts > MRU manager > mru_manager.ru.htm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head><title>Ìåíåäæåð MRU (ïîñëåäíèõ îòêðûâàâøèõñÿ äîêóìåíòîâ)
</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
<style type="text/css">
body     { font-family:verdana,arial,helvetica;font-size:12px; }
pre { font-family: verdana,arial; font-size:11px; color:#0000FF;
      background-color: #EFEFF0; border: 1px solid #D0D0F0; padding:6px;
}
td   { font-family:arial,helvetica;font-size:12px;}
td.head  { background-color: #FBFBFE; border: 1px solid #ccf; font-weight:bold; padding-left:6px;}
tr.odd   { background-color: #F0F0F8; color:#000000; }
tr.even  { background-color: #E0E0F0; color:#000000; }
h4       { background-color: #E0E0F0; color:#000000;
           text-align: left; font-size:12px; }
h5       { background-color: #E0E0F0; color:#000000;
           text-align: left; font-size:11px; padding-left:8px;}
hr		{ height:1px; border:0; color: #aae;}
</style>
</head>
<body>
<!-- DOC BEGIN -->

<h3>Ìåíåäæåð MRU (ïîñëåäíèõ îòêðûâàâøèõñÿ äîêóìåíòîâ)</h3>

Ïðàêòè÷åñêè ëþáîå ïðèëîæåíèå ñ "äðóæåñòâåííûì èíòåðôåéñîì" ïîçâîëÿåò çàïîìèíàòü íåñêîëüêî ïîñëåäíèõ äîêóìåíòîâ, îòêðûâàâøèõñÿ ïîëüçîâàòåëåì,
è ãäå-òî â ìåíþ âûâîäèò ïóíêòû äëÿ èõ áûñòðîãî ïîâòîðíîãî  îòêðûòèÿ. Â "ìèðó" äëÿ ýòîãî ñóùåñòâóåò àêðîíèì MRU -
 "Most Recently Used" äîêóìåíòû.
<br>
PHP ìîäóëü mru_manager.php (è class CMRUManager) äîáàâëÿåò ýòó ïîëåçíóþ ôóíêöèþ â WEB ïðèëîæåíèÿ.
 íàñòîÿùåå âðåìÿ îí óìååò:
<ul>
  <li>Ðåãèñòðèðîâàòü ñîáûòèå "îòêðûòèÿ äîêóìåíòà", ñîõðàíÿÿ åãî â MRU-ïàìÿòè (ðåàëèçîâàííîé â âèäå òàáëèöû â ÁÄ MySQL)</li>
  <li>Àâòîìàòè÷åñêè ñîçäàâàòü ñëóæåáíóþ òàáëèöó MRU, åñëè åå åùå íåò, ïðè ïåðâîì âûçîâå ìåòîäà ðåãèñòðàöèè îïåðàöèè ðàáîòû ñ äîêóìåíòîì - RegisterEvent()</li>
  <li>Óïðàâëÿòü ïîðÿäêîì âûâîäà îòêðûâàâøèõñÿ äîêóìåíòîâ, ñîðòèðóÿ èõ ïî âðåìåíè ïîñëåäíåãî äîñòóïà, è óäàëÿÿ (âûòåñíÿÿ) èç MRU-äàííûõ çàïèñè, âûøåäøèå çà ïðåäåëû
  óñòàíîâëåííîé "åìêîñòè" ñïèñêà</li>
  <li>Ñîõðàíÿòü (åñëè óêàçàí) êîä/ëîãèí ïîëüçîâàòåëÿ, (ó êàæäîãî ïîëüçîâàòåëÿ WEB-ïðèëîæåíèÿ áóäåò ñâîé ñïèñîê MRU)</li>
  <li>Ñîõðàíÿòü ñïèñêè MRU ðàçäåëüíî äëÿ ðàçíûõ "òèïîâ äîêóìåíòîâ", òàê ÷òî ïîëüçîâàòåëü ìîæåò èìåòü íåçàâèñèìûå ñïèñêè ïîñëåäíèõ äîêóìåíòîâ XML, òåêñòîâûõ, è ò.ä.
  </li>
  <li>Óäàëÿòü ïðîãðàììíî íåíóæíûå çàïèñè èç MRU-äàííûõ (íàïðèìåð, åñëè íåêèé äîêóìåíò óäàëÿåòñÿ èç ñèñòåìû, MRU-ññûëêó íà íåãî òîæå ëó÷øå óäàëèòü, ÷òîáû íå èçáåæàòü âûâîäà ó ïîëüçîâàòåëÿ îøèáîê "Óêàçàííûé ôàéë íå íàéäåí")</li>
</ul>

<h4>Èñïîëüçîâàíèå êëàññà</h4>

<b>Ïðèìåð èñïîëüçîâàíèÿ</b>

<br />( äàííîì ïðèìåðå ïðåäïîëàãàåòñÿ, ÷òî âêëþ÷åí ìåõàíèçì ñåññèé, è ÈÄ àâòîðèçîâàâøåãîñÿ ïîëüçîâàòåëÿ õðàíèòñÿ â $_SESSION['user_id'])
<pre>
$as_dbparam = array(
  'server'=&gt;'localhost
  'dbname'=&gt;'test'
  'username'=&gt;'',
  'password'=&gt;'',
); # ïàðàìåòðû èñïîëüçóþòñÿ â as_dbutils.php äëÿ óñòàíîâëäåíèÿ ñîåäèíåíèÿ ñ MySQL ÁÄ

require_once('as_dbutils.php'); # class for working with MySQL data, used by mru_manager

require_once('mru_manager.php');

$mru_params = array(
    'mrulength' =&gt; 8
   ,'userid'    =&gt; $_SESSION['user_id']
);

$mru = new CMRUManager($mru_params);
# èëè ïðîñòîé âàðèàíò âûçîâà ñ òåì æå ðåçóëüòàòîì : $mru = new CMRUManager($_SESSION['user_id'], 8);

# ...
# Ðåãèñòðàöèÿ îòêðûòèÿ ïîëüçîâàòåëåì äîêóìåíòà/ôàéëà
$mru-&gt;RegisterEvent('My favorite films.txt', 'text-file');

# ... Ïîëó÷åíèå ñïèñêà MRU, äëÿ ãåíåðàöèè ïóíêòîâ ìåíþ:
# (Äîïóñòèì, ó íàñ åñòü ñêðèïò <b>edit-text-file.php</b> äëÿ ïðîñìîòðà/ðåäàêòèðîâàíèÿ txt-ôàéëîâ)

$mruList = $mru-&gt;GetMRUList('text-file', 'edit-text-file.php?file={id}');

print_r($mruList);
</pre>

Çäåñü ìû ýìóëèðîâàëè ñîáûòèå îòêðûòèÿ ïîëüçîâàòåëåì ôàéëà 'My favorite films.txt';
ïîíÿòíî, ÷òî â ðåàëüíîì ïðèëîæåíèè âû âñòàâëÿåòå ýòîò îïåðàòîð â ñêðèïò ðåäàêòèðîâàíèÿ äîêóìåíòà, ïåðåäàâàÿ â êà÷åñòâå $itemid
óíèêàëüíûé íîìåð (ÈÄ) èëè èìÿ îòêðûâàåìîãî äîêóìåíòà/ôàéëà.

<br><br>
Ãäå-òî â áëîêå ôîðìèðîâàíèÿ ìåíþ âû äîëæíû ñíîâà ñîçäàòü îáúåêò êëàññà CMRUManager, ïîëó÷èòü ñ åãî ïîìîùüþ ñïèñîê MRU (GetMRUList())
è ïîñòðîèòü èç íåãî HTML-êîä äëÿ ïîäìåíþ "ïîñëåäíèå îòêðûâàâøèåñÿ äîêóìåíòû", ëèáî â äðóãîì ìåñòå HTML ñòðàíèöû.

<h4>Îïèñàíèå ìåòîäîâ êëàññà</h4>

<b>CMRUManager([$options])</b> - â êîíñòðóêòîð êëàññà ìîæíî ïåðåäàòü àññîöèàòèâíûé ìàññèâ ñî âñåìè íåîáõîäèìûìè ïàðàìåòðàìè:
<br><br>
'<b>tablename</b>' =&gt; 'MRU_table_name' : ïî óìîë÷àíèþ äëÿ õðàíåíèÿ MRU-äàííûõ èñïîëüçóåòñÿ òàáëèöà <b>mru_data</b>, ñîçäàâàåìàÿ â òåêóùåé áàçå äàííûõ.
Çäåñü ìîæíî óêàçàòü ñâîå èìÿ.
<br />
'<b>mrulength</b>' =&gt; ìàêñèìàëüíàÿ äëèíà îäíîãî ñïèñêà MRU (îáùàÿ äëÿ âñåõ òèïîâ äîêóìåíòîâ). Ïî óìîë÷àíèþ ýòî 4 çàïèñè (çàïîìèíàåòñÿ ÷åòûðå ïîñëåäíèõ äîêóìåíòà).
<br />
'<b>mrulengths</b>' =&gt; $array , àññîöèàòèâíûé ìàññèâ ìàêñèìàëüíûõ äëèí ñïèñêîâ, äëÿ êàæäîãî óêàçàííîãî òèïà äîêóìåíòîâ.
<br />Íàïðèìåð: ìû õîòèì çàïîìèíàòü â MRU ïîñëåäíèå 8 òåêòîâûõ ôàéëîâ (òèï 'text files'), è äåñÿòü XML ôàéëîâ ('xml files').
 ýòîì ñëó÷àå ñëåäóåò ïåðåäàòü ìàññèâ : <b>array('text files'=&gt;8, 'xml files'=&gt;10)</b>.
<br />
'<b>userid</b>' =&gt; user_id, óíèêàëüíûé êîä èëè ëîãèí àâòîðèçîâàâøåãîñÿ ïîëüçîâàòåëÿ. Âñå ïîñëåäóþùèå âûçîâû ìåòîäîâ áóäóò èñïîëüçîâàòü åãî äëÿ èäåíòèôèêàöèè ñïèñêà MRU.

<br /><br />Âìåñòî ïåðåäà÷è ìàññèâà â êîíñòðóêòîðå ìîæíî èñïîëüçîâàòü "ñêàëÿðíûå" ïàðàìåòðû : åñëè â ïåðâîì ïàðàìåòðå ïåðåäàòü íå ìàññèâ,
òî îí áóäåò èíòåðïðåòèðîâàòüñÿ êàê ÈÄ ïîëüçîâàòåëÿ, à âòîðîé ïàðàìåòð - äëèíà (åìêîñòü) îäíîãî MRU ñïèñêà.
<br />
Ò.å. äâà âûçîâà áóäóò èäåíòè÷íû:
<pre>
$mru = new CMRUManager(array('userid'=&gt;'test_user', 'mrulength'=&gt;8);
#  ÈËÈ ÒÀÊ :
$mru = new CMRUManager('test_user', 8);
</pre>

<br /><br />

<b>RegisterEvent($itemid, $itemtype='', $userid='')</b> - Ðåãèñòðàöèÿ îòêðûòèÿ äîêóìåíòà ïîëüçîâàòåëåì. ÈÄ (èìÿ) äîêóìåíòà çàíîñèòñÿ â òàáëèöó MRU data,
ñ óêàçàííûì òèïîì äîêóìåíòà.
<br />
Çäåñü æå ïðîèñõîäèò àâòîìàòè÷åñêîå âûòåñíåíèå (óäàëåíèå) óñòàðåâøèõ çàïèñåé, âûõîäÿùèõ çà ïðåäåëû çàäàííîé åìêîñòè MRU-ñïèñêà.

<br /><br />
<b>GetMRUList($itemtype='', $uri_pattern=false, $userid='')</b> - âîçâðàùàåò òåêóùèé ñïèñîê ïîñëåäíèõ îòêðûòûõ äîêóìåíòîâ óêàçàííîãî òèïà.
<br />Åñëè óêàçàí íåîáÿçàòåëüíûé âòîðîé ïàðàìåòð <b>$uri_pattern</b>, òî îí äîëæåí ñîäåðæàòü  ôðàãìåíò "{id}" äëÿ çàìåíû íà ðåàëüíîå çíà÷åíèå ÈÄ äîêóìåíòà
 òàêîì ñëó÷àå â âîçâðàùàåìîì ìàññèâå áóäåò åùå îäèí ýëåìåíò - ñãåíåðèðîâàííûé uri äëÿ îòêðûòèÿ äîêóìåíòà.
<br />Ðåçóëüòàò - ïóñòîé ìàññèâ èëè àññîö.ìàññèâ, ãäå êàæäàÿ ñòðîêà ñîäåðæèò äàííûå îá îäíîì îáúåêòå (äîêóìåíòå):
<table border=0>
  <tr>
    <td class="head">Ýëåìåíò ìàññèâà</td>
    <td class="head">Îïèñàíèå</td>
  </tr>
  <tr class="odd">
    <td nowrap="nowrap">$result[$row]['itemid']</td>
    <td>Item id - ÈÄ äîêóìåíòà (èëè èìÿ ôàéëà, êàê îíî áûëî ïåðåäàíî â RegisterEvent(), íàïðèìåð: "My favorite films.txt"</td>
  </tr>
  <tr class="even">
    <td nowrap="nowrap">$result[$row]['itemtype']</td>
    <td>Òèï äîêóìåíòà/îáúåêòà. Åñëè áûë ïåðåäàí íåïóñòîé ïàðàìåòð $itemtype, òî î÷åâèäíî, âñå ñòðîêè ìàññèâà áóäóò èìåòü çäåñü îäíî è òî æå çíà÷åíèå.</td>
  </tr>
  <tr class="odd">
    <td nowrap="nowrap">$result[$row]['eventdate']</td>
    <td>Äàòà/âðåìÿ ïîñëåäíåãî äîñòóïà ê äîêóìåíòó. Ôîðìàò ñòðîêè çàâèñèò îò âåðcèè áàçû MySQL (TIMESTAMP ïîëå â MySQL 3.x èìååò âèä "20101229102713",
    à â 4.x îí ñîâïàäàåò ñ DATETIME ïîëÿìè - "2010-12-29 10:27:13")
    </td>
  </tr>
  <tr class="even">
    <td nowrap="nowrap">$result[$row]['uri']</td>
    <td>Ýòîò ýëåìåíò ñîçäàåòñÿ åñëè áûë ïåðåäàí ïàðàìåòð $uri_pattern. Ñòðîêà "{id}" â íåì çàìåíÿåòñÿ íà "url-encoded" çíà÷åíèå $result[$row]['itemid'],
      Òàêàÿ ñòðîêà ìîæåò èñïîëüçîâàòüñÿ êàê HREF-àäðåñ â ñòðîêàõ ïîäìåíþ "ïîñëåäíèå îòêðûòûå...".
    </td>
  </tr>

</table>

<br /><br />
<b>ClearMRUData($itemtype=false, $itemid=false, $userid=false)</b> - óäàëÿåò äàííûå èç MRU. Ëþáîé ïàðàìåòð ìîæåò áûòü ïóñòûì, äåëàÿ
âîçìîæíûì "ãðóïïîâîå" óäàëåíèå.
Íàïðèìåð, ÷òîáû î÷èñòèòü âåñü MRU-ñïèñîê äëÿ òåêcòîâûõ ôàéëîâ (ó òåêóùåãî ïîëüòçîâàòåëÿ), ìîæíî âûçâàòü ClearMRUData('txt-files').

<br /><br /><b>ÂÍÈÌÀÍÈÅ</b>: Ñîçäàâàåìàÿ àâòîìàòè÷åñêè òàáëèöà äëÿ õðàíåíèÿ MRU ñïèñêîâ èììåò 80-ñèìâîëüíîå ïîëå ïîä item id - CHAR(80).
Åñëè â âàøåé ñèñòåìå ïðåäïîëàãàåòñÿ ðàáîòà ñ äîêóìåíòàìè, èìåþùèìè èìåíà äëèííåå 80 ñèìâîëîâ, íå çàáóäüòå âðó÷íóþ ìîäèôèöèðîâàòü
ñòðóêòóðó òàáëèöû ("mru_data" ïî óìîë÷àíèþ).
Òàêæå èìååò ñìûñë ïðîâåðèòü äëèíû äðóãèõ ïîëåé ( userid è itemtype èìåþò òèï CHAR(20) ).
<br />
<div style="text-align:right">Ðàñïðîñòðàíÿåòñÿ ïî ëèöåíçèè: BSD License</div>

<h4>Èñòîðèÿ âåðñèé</h4>

<H4>Èñòîðèÿ èçìåíåíèé</H4>

<h5>1.00.001 (30.12.2010)</h5>
<ul>
  <li>Ïåðâàÿ ïóáëèêàöèÿ</li>
</ul>

<!-- DOC END -->
<br />
<hr>
<div align=center><font size=-2>Copyright &copy; Alexander Selifonov, <a href="http://www.selifan.ru">www.selifan.ru</a>
</font></div>
</body></html>
Return current item: MRU manager