<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://familiasuperfeliz.com/index.php?action=history&amp;feed=atom&amp;title=ED_Plantillas</id>
	<title>ED Plantillas - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://familiasuperfeliz.com/index.php?action=history&amp;feed=atom&amp;title=ED_Plantillas"/>
	<link rel="alternate" type="text/html" href="https://familiasuperfeliz.com/index.php?title=ED_Plantillas&amp;action=history"/>
	<updated>2026-04-18T10:07:47Z</updated>
	<subtitle>Historial de revisiones de esta página en la wiki</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://familiasuperfeliz.com/index.php?title=ED_Plantillas&amp;diff=6310&amp;oldid=prev</id>
		<title>Ely: /* Instala y sincroniza plantiallas */</title>
		<link rel="alternate" type="text/html" href="https://familiasuperfeliz.com/index.php?title=ED_Plantillas&amp;diff=6310&amp;oldid=prev"/>
		<updated>2026-03-21T22:23:55Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Instala y sincroniza plantiallas&lt;/span&gt;&lt;/p&gt;
&lt;a href=&quot;https://familiasuperfeliz.com/index.php?title=ED_Plantillas&amp;amp;diff=6310&amp;amp;oldid=6309&quot;&gt;Mostrar los cambios&lt;/a&gt;</summary>
		<author><name>Ely</name></author>
	</entry>
	<entry>
		<id>https://familiasuperfeliz.com/index.php?title=ED_Plantillas&amp;diff=6309&amp;oldid=prev</id>
		<title>Ely en 21:44 21 mar 2026</title>
		<link rel="alternate" type="text/html" href="https://familiasuperfeliz.com/index.php?title=ED_Plantillas&amp;diff=6309&amp;oldid=prev"/>
		<updated>2026-03-21T21:44:32Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;es&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Revisión anterior&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revisión del 15:44 21 mar 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Línea 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Instala y sincroniza plantiallas ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Instala y sincroniza plantiallas ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== Ejecuta así ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;: &#039;&#039;&#039;cd /d C:\xampp\htdocs\scripts &amp;amp;&amp;amp; C:\xampp\php\php.exe sync_templates.php&#039;&#039;&#039;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;----&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;small&amp;gt;&amp;lt;small&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;small&amp;gt;&amp;lt;small&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key dbs14516687-dbwiki_fsf_:diff:1.41:old-6308:rev-6309:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Ely</name></author>
	</entry>
	<entry>
		<id>https://familiasuperfeliz.com/index.php?title=ED_Plantillas&amp;diff=6308&amp;oldid=prev</id>
		<title>Ely: Página creada con « == Instala y sincroniza plantiallas == &lt;small&gt;&lt;small&gt; &lt;pre&gt; &lt;?php  if (php_sapi_name() !== &#039;cli&#039;) {     die(&quot;Solo CLI\n&quot;); }  $fsfApi = &quot;http://localhost/00_FSF/api.php&quot;; $edApi  = &quot;http://localhost/00_ED/api.php&quot;;  $user = &quot;TU_USUARIO_ED&quot;; $pass = &quot;TU_PASSWORD_ED&quot;;  // ========================= // REQUEST BASE (con cookies) // =========================  function request($url, $params, $cookie = null) {     $ch = curl_init();     curl_setopt($ch, CURLOPT_URL, $url);…»</title>
		<link rel="alternate" type="text/html" href="https://familiasuperfeliz.com/index.php?title=ED_Plantillas&amp;diff=6308&amp;oldid=prev"/>
		<updated>2026-03-21T21:43:58Z</updated>

		<summary type="html">&lt;p&gt;Página creada con « == Instala y sincroniza plantiallas == &amp;lt;small&amp;gt;&amp;lt;small&amp;gt; &amp;lt;pre&amp;gt; &amp;lt;?php  if (php_sapi_name() !== &amp;#039;cli&amp;#039;) {     die(&amp;quot;Solo CLI\n&amp;quot;); }  $fsfApi = &amp;quot;http://localhost/00_FSF/api.php&amp;quot;; $edApi  = &amp;quot;http://localhost/00_ED/api.php&amp;quot;;  $user = &amp;quot;TU_USUARIO_ED&amp;quot;; $pass = &amp;quot;TU_PASSWORD_ED&amp;quot;;  // ========================= // REQUEST BASE (con cookies) // =========================  function request($url, $params, $cookie = null) {     $ch = curl_init();     curl_setopt($ch, CURLOPT_URL, $url);…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
== Instala y sincroniza plantiallas ==&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;small&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
if (php_sapi_name() !== &amp;#039;cli&amp;#039;) {&lt;br /&gt;
    die(&amp;quot;Solo CLI\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$fsfApi = &amp;quot;http://localhost/00_FSF/api.php&amp;quot;;&lt;br /&gt;
$edApi  = &amp;quot;http://localhost/00_ED/api.php&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$user = &amp;quot;TU_USUARIO_ED&amp;quot;;&lt;br /&gt;
$pass = &amp;quot;TU_PASSWORD_ED&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// =========================&lt;br /&gt;
// REQUEST BASE (con cookies)&lt;br /&gt;
// =========================&lt;br /&gt;
&lt;br /&gt;
function request($url, $params, $cookie = null) {&lt;br /&gt;
    $ch = curl_init();&lt;br /&gt;
    curl_setopt($ch, CURLOPT_URL, $url);&lt;br /&gt;
    curl_setopt($ch, CURLOPT_POST, true);&lt;br /&gt;
    curl_setopt($ch, CURLOPT_POSTFIELDS, $params);&lt;br /&gt;
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);&lt;br /&gt;
&lt;br /&gt;
    if ($cookie) {&lt;br /&gt;
        curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);&lt;br /&gt;
        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    $res = curl_exec($ch);&lt;br /&gt;
    curl_close($ch);&lt;br /&gt;
&lt;br /&gt;
    return json_decode($res, true);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// =========================&lt;br /&gt;
// LOGIN&lt;br /&gt;
// =========================&lt;br /&gt;
&lt;br /&gt;
function login($api, $user, $pass, $cookie) {&lt;br /&gt;
&lt;br /&gt;
    $token = request($api, [&lt;br /&gt;
        &amp;quot;action&amp;quot; =&amp;gt; &amp;quot;query&amp;quot;,&lt;br /&gt;
        &amp;quot;meta&amp;quot; =&amp;gt; &amp;quot;tokens&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot; =&amp;gt; &amp;quot;login&amp;quot;,&lt;br /&gt;
        &amp;quot;format&amp;quot; =&amp;gt; &amp;quot;json&amp;quot;&lt;br /&gt;
    ], $cookie);&lt;br /&gt;
&lt;br /&gt;
    $loginToken = $token[&amp;quot;query&amp;quot;][&amp;quot;tokens&amp;quot;][&amp;quot;logintoken&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
    request($api, [&lt;br /&gt;
        &amp;quot;action&amp;quot; =&amp;gt; &amp;quot;login&amp;quot;,&lt;br /&gt;
        &amp;quot;lgname&amp;quot; =&amp;gt; $user,&lt;br /&gt;
        &amp;quot;lgpassword&amp;quot; =&amp;gt; $pass,&lt;br /&gt;
        &amp;quot;lgtoken&amp;quot; =&amp;gt; $loginToken,&lt;br /&gt;
        &amp;quot;format&amp;quot; =&amp;gt; &amp;quot;json&amp;quot;&lt;br /&gt;
    ], $cookie);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// =========================&lt;br /&gt;
// TOKEN CSRF&lt;br /&gt;
// =========================&lt;br /&gt;
&lt;br /&gt;
function getCsrf($api, $cookie) {&lt;br /&gt;
    $res = request($api, [&lt;br /&gt;
        &amp;quot;action&amp;quot; =&amp;gt; &amp;quot;query&amp;quot;,&lt;br /&gt;
        &amp;quot;meta&amp;quot; =&amp;gt; &amp;quot;tokens&amp;quot;,&lt;br /&gt;
        &amp;quot;format&amp;quot; =&amp;gt; &amp;quot;json&amp;quot;&lt;br /&gt;
    ], $cookie);&lt;br /&gt;
&lt;br /&gt;
    return $res[&amp;quot;query&amp;quot;][&amp;quot;tokens&amp;quot;][&amp;quot;csrftoken&amp;quot;];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// =========================&lt;br /&gt;
// TODAS LAS PLANTILLAS FSF&lt;br /&gt;
// =========================&lt;br /&gt;
&lt;br /&gt;
function getTemplates($api) {&lt;br /&gt;
    $list = [];&lt;br /&gt;
    $cont = null;&lt;br /&gt;
&lt;br /&gt;
    do {&lt;br /&gt;
        $params = [&lt;br /&gt;
            &amp;quot;action&amp;quot; =&amp;gt; &amp;quot;query&amp;quot;,&lt;br /&gt;
            &amp;quot;list&amp;quot; =&amp;gt; &amp;quot;allpages&amp;quot;,&lt;br /&gt;
            &amp;quot;apnamespace&amp;quot; =&amp;gt; 10,&lt;br /&gt;
            &amp;quot;aplimit&amp;quot; =&amp;gt; &amp;quot;max&amp;quot;,&lt;br /&gt;
            &amp;quot;format&amp;quot; =&amp;gt; &amp;quot;json&amp;quot;&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        if ($cont) $params[&amp;quot;apcontinue&amp;quot;] = $cont;&lt;br /&gt;
&lt;br /&gt;
        $res = file_get_contents($api . &amp;quot;?&amp;quot; . http_build_query($params));&lt;br /&gt;
        $res = json_decode($res, true);&lt;br /&gt;
&lt;br /&gt;
        foreach ($res[&amp;quot;query&amp;quot;][&amp;quot;allpages&amp;quot;] as $p) {&lt;br /&gt;
            $list[] = $p[&amp;quot;title&amp;quot;];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $cont = $res[&amp;quot;continue&amp;quot;][&amp;quot;apcontinue&amp;quot;] ?? null;&lt;br /&gt;
&lt;br /&gt;
    } while ($cont);&lt;br /&gt;
&lt;br /&gt;
    return $list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// =========================&lt;br /&gt;
// CONTENIDO (FSF o ED)&lt;br /&gt;
// =========================&lt;br /&gt;
&lt;br /&gt;
function getContent($api, $title) {&lt;br /&gt;
    $res = file_get_contents($api . &amp;quot;?&amp;quot; . http_build_query([&lt;br /&gt;
        &amp;quot;action&amp;quot; =&amp;gt; &amp;quot;query&amp;quot;,&lt;br /&gt;
        &amp;quot;prop&amp;quot; =&amp;gt; &amp;quot;revisions&amp;quot;,&lt;br /&gt;
        &amp;quot;rvprop&amp;quot; =&amp;gt; &amp;quot;content&amp;quot;,&lt;br /&gt;
        &amp;quot;format&amp;quot; =&amp;gt; &amp;quot;json&amp;quot;,&lt;br /&gt;
        &amp;quot;titles&amp;quot; =&amp;gt; $title&lt;br /&gt;
    ]));&lt;br /&gt;
&lt;br /&gt;
    $res = json_decode($res, true);&lt;br /&gt;
&lt;br /&gt;
    foreach ($res[&amp;quot;query&amp;quot;][&amp;quot;pages&amp;quot;] as $p) {&lt;br /&gt;
        if (isset($p[&amp;quot;revisions&amp;quot;][0][&amp;quot;*&amp;quot;])) {&lt;br /&gt;
            return $p[&amp;quot;revisions&amp;quot;][0][&amp;quot;*&amp;quot;];&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return null;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// =========================&lt;br /&gt;
// GUARDAR EN ED&lt;br /&gt;
// =========================&lt;br /&gt;
&lt;br /&gt;
function save($api, $title, $content, $token, $cookie) {&lt;br /&gt;
&lt;br /&gt;
    request($api, [&lt;br /&gt;
        &amp;quot;action&amp;quot; =&amp;gt; &amp;quot;edit&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot; =&amp;gt; $title,&lt;br /&gt;
        &amp;quot;text&amp;quot; =&amp;gt; $content,&lt;br /&gt;
        &amp;quot;token&amp;quot; =&amp;gt; $token,&lt;br /&gt;
        &amp;quot;format&amp;quot; =&amp;gt; &amp;quot;json&amp;quot;&lt;br /&gt;
    ], $cookie);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// =========================&lt;br /&gt;
// EJECUCIÓN&lt;br /&gt;
// =========================&lt;br /&gt;
&lt;br /&gt;
$cookie = __DIR__ . &amp;quot;/cookie.txt&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Login...\n&amp;quot;;&lt;br /&gt;
login($edApi, $user, $pass, $cookie);&lt;br /&gt;
&lt;br /&gt;
$csrf = getCsrf($edApi, $cookie);&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Obteniendo plantillas...\n&amp;quot;;&lt;br /&gt;
$templates = getTemplates($fsfApi);&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Total: &amp;quot; . count($templates) . &amp;quot;\n\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
foreach ($templates as $tpl) {&lt;br /&gt;
&lt;br /&gt;
    echo &amp;quot;Sync $tpl ... &amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    $fsfContent = getContent($fsfApi, $tpl);&lt;br /&gt;
    $edContent  = getContent($edApi, $tpl);&lt;br /&gt;
&lt;br /&gt;
    if (!$fsfContent) {&lt;br /&gt;
        echo &amp;quot;ERROR (FSF vacío)\n&amp;quot;;&lt;br /&gt;
        continue;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ($fsfContent !== $edContent) {&lt;br /&gt;
        save($edApi, $tpl, $fsfContent, $csrf, $cookie);&lt;br /&gt;
        echo &amp;quot;ACTUALIZADO\n&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
        echo &amp;quot;SIN CAMBIOS\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;\n✔ SINCRONIZACIÓN COMPLETA\n&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/small&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
[[CATEGORY:WIKI]]&lt;br /&gt;
[[CATEGORY:WIKIS]]&lt;br /&gt;
[[CATEGORY:ZIV]]&lt;br /&gt;
[[CATEGORY:ED]]&lt;br /&gt;
[[CATEGORY:WIKIFSF]]&lt;/div&gt;</summary>
		<author><name>Ely</name></author>
	</entry>
</feed>