Soluciones practicas

De ActionApps Documentacion
Saltar a: navegación, buscar

Mark Lopez xanax Richard Lopez xanax Elizabeth Phillips xanax Kenneth Carter xanax Kenneth Edwards xanax Barbara Parker xanax Joseph Williams xanax Paul Gonzalez xanax Deborah Jones xanax Donna Johnson xanax Mark Hill xanax Mary Scott xanax Deborah Mitchell xanax Sharon Young xanax Elizabeth Hall xanax Margaret Scott xanax Ronald Phillips xanax Deborah Miller xanax Karen Adams xanax Mark Nelson xanax Donna Wilson xanax Dorothy Roberts xanax Paul Brown xanax Carol Clark xanax Brian Martin xanax Elizabeth Hall xanax Kevin Evans xanax Donald Martinez xanax Donna White xanax Elizabeth Phillips xanax Susan Scott xanax Michael Lewis xanax Edward Parker xanax William Evans xanax Steven Carter xanax Thomas Rodriguez xanax Edward Lee xanax Kenneth Mitchell xanax Jeff Hall xanax Ruth Anderson xanax Jennifer Young xanax Richard Walker xanax

Como editar un item en un website publico

Traducido de How to edit items in public website?

Adam 23:35 2 jun, 2006 (CEST)
Tu tienes preparado un formulario de envio anonimo publico y deseas usarlo para editar items. Como hacerlo?

Hay un script fillform.php3 asociado con las utilidades javascript en include/fillformutils.php3. Este script toma el id de item largo de la variable my_item_id y llama a las funciones javascript para buscar los campos y llenarlos apropiadamente.

Tu debes usarlo de esta manera: Dentro del archivo file anonymous.shtml

Colocar los siguientes includes

<!--#include virtual="/anonym.html"-->

<!--#include virtual="/aaa/fillform.php3"-->

<!--#include virtual="/bottom.html"-->

Para editar un item con los viejos valores cargados en el formulario puedes llamarlo asi

anonymous.shtml?my_item_id=...

Hay dos parametros adicionales que muchos usuarios no necesitarán: usar "form=formname" cuando tu cambies el nombre del formulario que contiene los campos (usualmente es llamado "f"). Puede usar "notrun = 1" si tu deseas llenar los controles e.g. solamente despues de clickar en algun lugar.

Solamente los items posteados de un website público y no actualizado en el administrador de las AA puede ser editado de esta manera - un flag ITEM_FLAG_ANONYMOUS_EDITABLE se encarga de esto. Este es reseteado cada vez que tu envias un item con itemedit.php3

El mismo script puede ser usado para rellenar condiciones en una pagina de busqueda. Ver en How to refill conditions on searchform?

Slideshow de imagenes interactivas con descripcion de texto

--Adam 06:57 21 sep, 2006 (CEST)
Un dato que muestra el poder de las AA cuando se combinan con

Javascript. En el proyecto donde trabajo necesitaban un Slideshow de imagenes interactivas con descripcion de texto y asi que decidi implementarlo con AA. El asunto es sencillo. Pueden verlo en

http://ertic.inictel.net en la seccion Fotonoticia

1. Bajar el script de

Dynamic Drive

2. Crean una vista texto completo (tambien puede ser una vista lista de items de un solo item) y colocan el codigo de la siguiente manera. (En cada item lo configure para que albergara 10 fotos)

----
SECCION ENCABEZADO HTML

----


<code><p><input type="button" id="btnPrev" value="<<
Previous" onclick="Prev();"> <input type="button" id="bntPlay"
value="Play - Stop" onclick="Play()"> <input type="button"
id="btnNext" value="  Next >>  " onclick="Next();"></p></code>

<code><p align="center"><img id="_Ath_Slide" onload="OnImgLoad()"> </p></code>

<p><b>Description:</b> 
<SPAN id="_Ath_FileName"> </SPAN> <br>
<b>Number of Pictures: 
<SPAN id="_Ath_Img_X"></SPAN>
 of 
<SPAN id="_Ath_Img_N"></SPAN>
</b></p>


<script language="JavaScript1.2">

/*
Interactive Image slideshow with text description
By Christian Carlessi Salvad? (cocolinks@c.net.gt). Keep this notice intact.
Visit http://www.dynamicdrive.com for script
*/


g_fPlayMode = 0;
g_iimg = -1;
g_imax = 0;
g_ImageTable = new Array();

function ChangeImage(fFwd)
{
if (fFwd)
{
if (++g_iimg==g_imax)
g_iimg=0;
}
else
{
if (g_iimg==0)
g_iimg=g_imax;
g_iimg--;
}
Update();
}

function getobject(obj){
if (document.getElementById)
return document.getElementById(obj)
else if (document.all)
return document.all[obj]
}

function Update(){
getobject("_Ath_Slide").src = g_ImageTable[g_iimg][0];
getobject("_Ath_FileName").innerHTML = g_ImageTable[g_iimg][1];
getobject("_Ath_Img_X").innerHTML = g_iimg + 1;
getobject("_Ath_Img_N").innerHTML = g_imax;
}


function Play()
{
g_fPlayMode = !g_fPlayMode;
if (g_fPlayMode)
{
getobject("btnPrev").disabled = getobject("btnNext").disabled = true;
Next();
}
else
{
getobject("btnPrev").disabled = getobject("btnNext").disabled = false;

}
}
function OnImgLoad()
{
if (g_fPlayMode)
window.setTimeout("Tick()", g_dwTimeOutSec*1000);
}
function Tick()
{
if (g_fPlayMode)
Next();
}
function Prev()
{
ChangeImage(false);
}
function Next()
{
ChangeImage(true);
}
----
SECCION FILAS IMPARES

----

////configure below variables/////////////////////////////

//configure the below images and description to your own.
{switch({_#FOTO1___}).+:g_ImageTable[g_imax++] = new Array
("_#FOTO1___", "_#LEYEND1_");:}
{switch({_#FOTO2___}).+:g_ImageTable[g_imax++] = new Array
("_#FOTO2___", "_#LEYEND2_");:}
{switch({_#FOTO3___}).+:g_ImageTable[g_imax++] = new Array
("_#FOTO3___", "_#LEYEND3_");:}
{switch({_#FOTO4___}).+:g_ImageTable[g_imax++] = new Array
("_#FOTO4___", "_#LEYEND4_");:}
{switch({_#FOTO5___}).+:g_ImageTable[g_imax++] = new Array
("_#FOTO5___", "_#LEYEND5_");:}
{switch({_#FOTO6___}).+:g_ImageTable[g_imax++] = new Array
("_#FOTO6___", "_#LEYEND6_");:}
{switch({_#FOTO7___}).+:g_ImageTable[g_imax++] = new Array
("_#FOTO7___", "_#LEYEND7_");:}
{switch({_#FOTO8___}).+:g_ImageTable[g_imax++] = new Array
("_#FOTO8___", "_#LEYEND8_");:}
{switch({_#FOTO9___}).+:g_ImageTable[g_imax++] = new Array
("_#FOTO9___", "_#LEYEND9_");:}
{switch({_#FOTO10__}).+:g_ImageTable[g_imax++] = new Array
("_#FOTO10__", "_#LEYEND10");:}

//extend the above list as desired
g_dwTimeOutSec=2

////End configuration/////////////////////////////
----
SECCION PIE HTML

----

if (document.getElementById||document.all)
window.onload=Play

</script>


<p><font face="Arial" size="-2">Free DHTML scripts
provided by<br>
<a href="http://dynamicdrive.com">Dynamic Drive</a></font></p>

<!----------------------------------------------------------------------------------------------------------->

3. Lo incluyen en su modulo de sitio o en su defecto en la pagina SHTML que usen.

Basicamente, eso es todo

Saludos

Adam

Construccion de un canal con muchisimos campos

Hola a todos

Comparto a continuacion mi experiencia siguiendo el FAQ
http://actionapps.org/faq/detail.shtml?x=1689

Segun el FAQ hay un script hecho en Perl que sirve para construir
campos rapidamente un canal con muchisimo campos. El script esta
ubicado en
/loquesea/.../apc-aa/misc/txt2fields

Lo he probado en el ultimo CVS de las AA (2.8.1+) y funciona.

La idea es muy sencilla. Se trata de cargar el archivo que contiene
las instrucciones de creacion de los campos directamente a la base de
datos usando el script txt2fields.
La sentencia de ejecucion del archivo es algo asi:

root@server:/var/www/html/apc-aa/misc/txt2fields> ./txt2fields
1f04dc8d7f560c0acd52a8043e7bf8e8 < canal

Donde 1f04dc8d7f560c0acd52a8043e7bf8e8 es el ID del Canal

y canal es un archivo de texto que en mi caso contenia lo siguiente:

=========================================
field Administrador de Red
id headline........
required 1
alias1 _#ADMINIST

field Problemas de Conectividad
id text...........1
input_show_func mch:Probl_conectivid:
alias1 _#PROBCONE

field Descripcion del problema de conectividad
id text...........2
input_show_func txt:8
alias1 _#PROBCON1

field Soluciones para el problema de conectividad
id text...........3
input_show_func txt:8
alias1 _#PROBCON2

field Problemas de Computadores o Servidores
id text...........4
input_show_func mch:
alias1 _#PROBSER1

field Descripcion del problema con Computadores o Servidores
id text...........5
input_show_func txt:8
alias1 _#PROBSER2


field Soluciones para el problema con Computadores o Servidores
id text...........6
input_show_func txt:8
alias1 _#PROBSER3

field Problemas de Software
id text...........9
input_show_func mch:
alias1 _#PROBSOF1

field Descripcion del problema con Software
id text..........10
input_show_func txt:8
alias1 _#PROBSOF2


field Soluciones para el problema con Software
id text..........11
input_show_func txt:8
alias1 _#PROBSOF3

field Problemas de Perifericos
id text..........12
input_show_func mch:
alias1 _#PROBPER1

field Descripcion del problema con Perifericos
id text..........13
input_show_func txt:8
alias1 _#PROBPER2

field Soluciones para el problema con Perifericos
id text..........14
input_show_func txt:8
alias1 _#PROBPER3


field Problemas de Equipos de Energia Estabilizada
id text..........15
input_show_func mch:
alias1 _#PROBENE1

field Descripcion del problema con Equipos de Energia Estabilizada
id text..........16
input_show_func txt:8
alias1 _#PROBENE2


field Soluciones para el problema con Equipos de Energia Estabilizada
id text..........17
input_show_func txt:8
alias1 _#PROBENE3



field Editado por
in_item_tbl edited_by
input_show_func nul
input_validate text
input_help Identification of last editor
search_show 0
input_show 0
id edited_by.......
search_ft_show 0
search_ft_default 0
input_insert_func uid
alias1 _#EDITEDBY
alias1_help alias for Last edited By

field Fecha de expiracion
in_item_tbl expiry_date
input_show_func dte:1:10:1
input_validate date
input_help Date when the news expires
search_show 0
input_show 0
alias1_func f_d:m/d/Y
id expiry_date.....
search_ft_show 0
search_ft_default 0
required 1
input_insert_func dte
alias1 _#EXP_DATE
text_stored 0
alias1_help alias for Expiry Date
input_default dte:2000

field Comments Count
feed 1
in_item_tbl disc_count
input_help Internal field - do not change
search_show 0
input_show 0
id disc_count......
search_ft_show 0
search_ft_default 0
required 1
input_insert_func nul
alias1 _#D_ALLCNT
alias1_help alias for number of all discussion comments for this item
input_default qte:0

field Approved Comments Count
feed 1
in_item_tbl disc_app
input_help Internal field - do not change
hidden 1
input_show 0
id disc_app........
required 1
input_insert_func nul
alias1 _#D_APPCNT
alias1_help alias for number of approved discussion comments for this item
input_default qte:0

field Displayed Times
feed 1
in_item_tbl display_count
input_help Internal field - do not change
search_show 0
input_show 0
id display_count...
search_ft_show 0
search_ft_default 0
required 1
input_insert_func nul
alias1 _#DISPL_NO
alias1_help alias for number of displaying of this item
input_default qte:0

field Resaltar
in_item_tbl highlight
input_show_func chb
input_validate bool
input_help Interesting news - shown on homepage
search_show 0
input_show 0
id highlight.......
search_ft_show 0
search_ft_default 0
input_insert_func boo
text_stored 0

field Ultima modificacion
in_item_tbl last_edit
input_show_func dte:1:10:1
input_validate date
input_help Date of last edit
search_show 0
input_show 0
alias1_func f_d:m/d/Y
id last_edit.......
search_ft_show 0
search_ft_default 0
input_insert_func now
alias1 _#LASTEDIT
text_stored 0
alias1_help alias for Last Edit
input_default now:

field Publicado por
in_item_tbl posted_by
input_validate text
input_help Identification of author
search_show 0
input_show 0
id posted_by.......
search_ft_show 0
search_ft_default 0
alias1 _#POSTEDBY
alias1_help alias for Author

field Fecha de envio
in_item_tbl post_date
input_show_func nul
input_validate date
input_help Date of posting this news
search_show 0
input_show 0
alias1_func f_d:m/d/Y
id post_date.......
search_ft_show 0
search_ft_default 0
required 1
input_insert_func now
alias1 _#POSTDATE
text_stored 0
alias1_help alias for Post Date
input_default now:

field Fecha de publicacion
in_item_tbl publish_date
input_show_func dte:1:10:1
input_validate date
input_help Date when the news will be published
search_show 0
input_show 0
alias1_func f_d:m/d/Y
id publish_date....
search_ft_show 0
search_ft_default 0
required 1
input_insert_func dte
alias1 _#PUB_DATE
text_stored 0
alias1_help alias for Publish Date
input_default now:

field Slice
in_item_tbl slice_id
input_help Internal field - do not change
search_show 0
input_show 0
alias1_func f_n:slice_id........
id slice_id........
search_ft_show 0
search_ft_default 0
required 1
input_insert_func nul
alias1 _#SLICE_ID
alias1_help alias for id of slice
input_default qte:1

field Status Code
in_item_tbl status_code
input_show_func sel:AA_Core_Bins....
input_validate number
input_help Select in which bin should the news appear
search_show 0
input_show 0
id status_code.....
search_ft_show 0
search_ft_default 0
required 1
input_insert_func num
text_stored 0
input_default qte:1
search_show 0

============================================

Es muy importante, insertar los campos que van de "Editado por" a
"Status Code" en el archivo canal que he mostrado pues sino los items
no se muestran en el administrador de items.
Dos observaciones. 1. Recuerden habilitar los permisos para leer el
archivo canal y que la ruta al binario Perl sea correcta dentro del
archivo txt2fields
2. Al ejecutar el archivo todos los campos que estaban antes se borran.

Existe tambien un archivo inverso, el fields2txt, el comando para
usarlo es al reves

root@server:/var/www/html/apc-aa/misc/txt2fields> ./fields2txt
1f04dc8d7f560c0acd52a8043e7bf8e8 > canal2

En este caso el contenido de todos los campos se insertan en el archivo canal2
Esto pueder servir para que chequeen la estructura de los campos de
otros canales y se den idea como programarlos despues en archivo de
texto


Saludos
Adam

Creacion de funcion personalizada para campo

Hola a todos

Quisiera comentar como he logrado crear una funcion personalizada para un campo siguiendo los pasos señalados en el siguiente FAQ http://actionapps.org/faq/detail.shtml?x=1773

El problema era configurar un campo DOCUMENTOS con 17 checkbox que muestre el avance en % de los documentos entregados segun se vayan marcando los checkbox. Por ejemplo, si marcaba la mitad de los checkbox, el campo debia mostrar 50% y si marcaba todos debia mostrar 100%.

Como no hay una funcion en las AA estandar que mida la cantidad de checkbox marcados tuve que hacer una funcion personalizada. El codigo de la funcion tuve que ponerlo en /var/www/html/apc-aa/include/usr_aliasfnc.php3

Por si acaso el archivo usr_aliasfnc.php3 se tiene que crear pues no existe por defecto. Para llamar a la funcion use el alias 2 del campo DOCUMENTOS con el tipo de funcion

f_u - definida por el usuario

y en los parametros puse:

usr_contar:


Por ultimo, el codigo de la funcion php que use es el sgte:

<?php

function usr_contar ($columns, $col, $param)
 {
      $contador=0;
      $cadena='';

// 17 es el numero total de checkbox

              for ($i=0;$i<17;$i++){
              if($cadena.$columns[$col][$i][value]!='')
              {$contador++;}

              }

              $porcentaje = round((($contador/17)*100),2);

              return $porcentaje;

  }
?>

No olviden, que para ver el campo debemos meterlo en la ventana de diseño del administrador de items.

Suma total de un mismo campo en todos los items de un canal

--Adam 19:54 4 feb, 2007 (CET) Hola a tod@s

Les comparto el procedimiento que he empleado para hacer una consulta directa a la base de datos de las AA para sumar un mismo campo en todos los items de un canal. Puede servir para generar reportes estadisticos de una lista de items (con esto ya estamos cerca de armar un modulo de encuestas muy simple usando los mismos items de un canal). Lo he programado en php.

Una nota previa

El Id del canal que vemos en la ventana de administracion no es el mismo que se almacena en la base de datos. Revisando el codigo fuente de las AA me di cuenta que se usa una funcion para "empaquetarla", la funcion pack() .

Por ejemplo, si el Id del canal Noticias es 74656d706c6174657771777771776e6d su Id de almacenamiento en la base de datos es Ú²œ�&à^"F‡Ö¡�²ŒF,... bien feo, no? Entonces para hacer cualquier consulta a la base de datos necesitamos convertir (empaquetar) el Id de la siguiente manera

$codigo=pack('H*','74656d706c6174657771777771776e6d');

al hacer esto la variable $codigo capturara el valor Ú²œ�&à^"F‡Ö¡�²ŒF, con el cual podemos hacer todas las consultas que queramos :)

El codigo que use es el siguiente y pueden copiarlo en un script php dentro del servidor que tiene sus ActionApps cambiando claro los datos que se necesiten como el Id del canal, los datos de acceso a la base de datos y los id de los campos. La consulta a la base de datos si es la misma.

<?php

$bd_host = "localhost";
$bd_usuario = "user";  /*****cambiar***/
$bd_password = "password"; /*****cambiar***/
$bd_base = "database"; /*****cambiar***/

$codigo=pack('H*','74656d706c6174657771777771776e6d');  /*****cambiar
por el Id de su canal***/


echo $codigo.'<br>';


$con = mysql_connect($bd_host, $bd_usuario, $bd_password) or die ("no
me puedo conectar");

mysql_select_db($bd_base) or die ("no me puedo conectarme a esa base
de datos");

/*****cambiar text...........7 por el valor del campo que quieren
sumar en todos los items***/

$result=mysql_query("select * from content,item,slice where
slice.id='$codigo'AND item.slice_id=slice.id AND
content.item_id=item.id AND content.field_id='text...........7'") or
die("consulta invalida");


echo "<table border=1>";
$suma=0;
while ($row=mysql_fetch_array($result))
{
echo '<tr><td>'.$row["item_id"].'</td>';
echo '<td>'.$row["field_id"].'</td>';
echo '<td>'.$row["number"].'</td>';
echo '<td>'.$row["text"].'</td>';
echo '<td>'.$row["flag"].'</td></tr>';

$suma = $suma + $row["text"];
}
echo "</table>";
echo $suma;

?>

Con una consulta parecida se puede listar todos los items del canal si usamos el id headline........

$result=mysql_query("select * from content,item,slice where slice.id='$codigo'AND item.slice_id=slice.id AND content.item_id=item.id AND content.field_id='headline........'") or die("consulta invalida");

echo "<table border=1>"; while ($row=mysql_fetch_array($result)) { echo '<tr><td>'.$row["item_id"].'</td>'; echo '<td>'.$row["field_id"].'</td>'; echo '<td>'.$row["number"].'</td>'; echo '<td>'.$row["text"].'</td>'; echo '<td>'.$row["flag"].'</td></tr>'; } echo "</table>";

Funcion personalizada para fechas extendidas en español

--Adam 19:49 4 feb, 2007 (CET)

La fecha 29/01/2006 se verá como Lunes 29 de enero del 2006.

Revisar http://www.actionapps.com/faq/detail.shtml?x=1773

La funcion personalizada es


<?php

   function usr_fecha_espanol($columns, $col, $param="") {
       $dte     = $columns[$col][0][value];
       $month   = array( 1 => "enero", 2=>"febrero", 3=>"marzo", 4=>"abril",
       5=>"mayo", 6=>"junio", 7=>"julio", 8=>"agosto",9=>"setiembre",
       10=>"octubre", 11=>"noviembre", 12=>"diciembre");
       $weekday = array(1=>"lunes",2=>"martes",3=>"miércoles",4=>"jueves",
       5=>"viernes",6=>"sábado",0=>"domingo");
       $m       = $month[ date("n", $dte)];
       $end     = ( !$param ? "" : $weekday[ date("w", $dte) ]);
       return $end." ".date("j", $dte) ." de $m "." de ". date("Y", $dte);
   }


?>

Este codigo debes pegarlo dentro de un archivo que debes nombrar asi usr_aliasfnc.php3 pues no existe

Este archivo debes colocarlo dentro de la carpeta de instalacion de las ActionApps, por ejemplo, (no se cual sera la ruta en tu servidor)

/var/www/html/apc-aa/include/

siempre debe estar dentro de la carpeta include

Luego debes configurar el campo que usas como fecha poniendo en el tipo de funcion f_u - definida por el usuario

y en parametros debes poner usr_fecha_espanol:

Agrupacion de items repetidos para que parezcan unicos en vista listado

--Adam 02:40 6 feb, 2007 (CET)

Les comparto una solución en javascript para agrupar items repetidos en vista listado de forma tal que parezcan unicos. Muchas veces tenemos listados con varios tipos de clasificacion y quisieramos mostrarlos en una vista sin que se repitan. Pues bien aqui va el codigo (lo use para hacer una seleccion de items en un modulo de sitio junto al parametro als para pasar el parametro "tema" a la condicion 1 de la vista ubicada en ese nodo)


----
En Encabezado HTML
----
<script language="JavaScript">
arr1 = new Array()
arr2 = new Array()

----
En Filas impares
----
arr1[_#ITEMINDX] = "<a
href=index.shtml?s=A&e=a&r=a&als[tema]=_#NOM_TEMA>_#NOM_TEMA</a>"

----
En Pie HTML
----

for (c in arr1)
arr2[arr1[c]] = c

for (c in arr2)
document.write( c + '<br>');
</script>
----

Eso es todo. El codigo lo tome de http://www.thescripts.com/forum/thread443941.html Un dato adicional, para probarlo use una consola javascript http://personal-de-jall.webcindario.com/software/consola_js.php

Como se pasan parametros a una funcion personalizada

Muchas veces las funciones para cada campo nos quedan cortas y no nos queda mas remedio que desear hacernos una a la medida. Si se sabe algo de php es algo sencillo armarse una, el problema comienza cuando queremos pasar un parametro. Bueno, despues de un par de horas comprendi como funciona el asunto.

Lo que sucede es que las AA incluyen al nombre de la funcion personalizada como parte de la variable parametro ($param). Por ejemplo si uno configura su campo asi;


Alias 1: _#MENU____ Función: f_u - definida por el usuario Parámetros: usr_explode:>:1 Descripcion: Esta funcion sirve para dividir una cadena en varias partes separadas por el signo > y para tomar el segundo valor de las cadenas divididas


Uno podria pensar que el valor de la variable $param es >, pues no, el valor de la variable $param es TODA la cadena incluyendo el nombre de la funcion," usr_explode:>:1 ", subrayo,toda la cadena. Una vez descubierto esto, es facil darse cuenta que la captura de los parametros que quisieramos pasar depende de que usemos funciones nativas en php para extraerlos como la funcion split por ejemplo

Aqui les comparto el codigo comentado de una funcion que programé para separar una cadena en varias parte separadas por el simbolo >, como pueden ver puedo pasar tambien el valor de 1 para indicar que solo quiero trabajar con la segunda cadena separada (la primero es 0). Uno puede pasar todos los parametros que quiera.

<?php

function usr_explode ($columns, $col, $param)
{
$extrae_param = split(":",$param); // extrayendo el parametro
$cadena = html_entity_decode($columns[$col][0][value]); // Convertir
todas las entidades HTML
$trozos = explode($extrae_param[1],$cadena); // partimos la cadena
$posicion = $extrae_param[2]; // extraigo el parametro que me indica
el nivel del submenu
return $trozos[$posicion];

}

?>

Saludos

Adam


Como almacenar variables URL en AA

Uno de los problemas mas importantes cuando uno avanza en las AA, es el almacenamiento de las variables pasadas por URL. Hasta donde he sabido hay dos formas conocidas de definir y almacenar variables.

1.El uso de "als", pero su uso esta restringido a pasar una variable entre un nodo y otro, despues de eso pierde su valor. Ver http://actionapps.org/faq/detail.shtml?x=1738 2. Se pueden tambien almacenar variables en el archivo de control del modulo de sitio pero su valor es definitivo. Ver http://actionapps.org/faq/detail.shtml?x=1680

Sin embargo, muchas veces queremos definir una variable que pueda permanecer mientras vamos navegando en la web o cambiarla a voluntad. Hay una alternativa, usar el archivo de control del modulo de sitio, esto presupone que para que esto funcione tengamos la web diseñada en el modulo de sitio.

Bueno, esto puede hacerse normalmente con un archivo de control. El detalle comienza cuando la variable que quiero usar tendrá mas de 1 caracter. Por ese motivo les comparto un archivo de control de 5 niveles, donde el valor de la variable t puede almacenar cadenas de caracteres de hasta 50 en este caso.

Saludos

Adam


<?php
#este script trabaja con 5 niveles
# apc: variable de estado
# campos:
#  Caracter      Valores                   Significa
#  --------  --------------        ------------------------------------
#  1                                       nivel 1 ($s)
#  2             0-9 ó a-A ó A-Z   nivel 2 ($e)
#  3             0-9 ó a-A ó A-Z   nivel 3 ($r)\
#  4             0-9 ó a-A ó A-Z   nivel 4 ($a)
#  5             0-9 ó a-A ó A-Z   nivel 5 ($t)
#  6+            numérico              Número de Página ($p)
#  +7+           numérico              Identificador de Item (corto) ($x)


# Inicializar la variable de estado si no está especificada
if( !$apc )  $apc = 'I---x1-';

# Separar la variable de estado $apc en cada una de los estados
# (los valores actuales se prefijan por o:  $s actual es $os)

$patron =  "/^([a-zA-Z])(-|[a-zA-Z])(-|[a-zA-Z])(-|[a-zA-Z])(-|[a-zA-Z\s]{1,50})(-|[0-9]+)(-|[0-9-]+)$/s";
//una letra, un guion o una letra, un guion o una letra,un guion o una
letra,entre 1 y 20 guiones o letras o espacios en blanco, un guion o
cualquier numero,un guion o cualquier numero

if( preg_match($patron,$apc,$vars )) {
 list($anterior, $os,$oe,$or,$oa,$ot,$op,$ox) = $vars; //asigna una
variable a cada elemento del arreglo
                                                                                                               //si es que esta bien la cadena asignada por url  a la
variable $vars
 $parse="okas # $apc # $ot";} // bota el resultado
else {
 # si la variable $apc esta en formato equivocado, se inicializa
 list($anterior, $os,$oe,$or,$oa,$ot,$op,$ox) =
array('I','-','-','-','x','1','-');  //asigna valores a cada elemento
del arreglo
                                                                                                               //si es que NO esta bien la cadena asignada por url  a
la variable $vars
 $parse="error # $apc # $ot";// bota el resultado
}

# sh_itm es el identificador largo de un item
# lo colocan las action cuando se hace "vista preliminar"
# Aqui se obtiene la vista para mostrar ese item, y se asigna el
# correspondiente "short item id" a la variable x
if ( isset($sh_itm) ) {
       $id = q_pack_id($sh_itm);
       $sql = "SELECT v.id AS vid, i.short_id AS sid FROM view v, slice s,
item i WHERE i.id='$id' AND i.slice_id=s.id AND v.slice_id=s.id AND
v.type='full'";
       $db->query($sql);
       if( $db->next_record() ) {
               $vid = $db->f('vid');
               $x = $db->f('sid');
       }
}

# Aqui se escriben las posibles peticiones URL.

if( isset($s) ) {$os=$s; $op='1';$ox='-';}
if( isset($e) ) {$oe=$e; $op='1';$ox='-';}
if( isset($r) ) {$or=$r; $op='1'; $ox='-';}
if( isset($a) ) {$oa=$a; $op='1'; $ox='-';}
if( isset($t) ) {$ot=$t; $op='1'; $ox='-';}
if( isset($p) ) {$op=$p; $ox='-';}              # pagina
if( !isset($x) && isset($ox) && $ox!='-') { $x = $ox; }
if( isset($x) ) {$op='-'; $ox=$x;}              # id de item a mostrar
if( isset($scrl) ) {                            # scroller de pagina, sirve para numerar las paginas
 $pagevar = "scr_".$scrl."_Go";
 $op = $$pagevar;
 $ox='-';
}

# Para mostrar el contenido de un item cuando se especifica via el parametro
# "x":  encontrar la vista de texto completo para mostrar ese item
if ( isset($x) && !isset($sh_itm) ) {
       $sql = "SELECT v.id AS vid FROM view v, slice s, item i WHERE
i.short_id=$x AND i.slice_id=s.id AND v.slice_id=s.id AND
v.type='full'";
       $db->query($sql);
       if( $db->next_record() ) {
               $vid = $db->f('vid');
       }
}


# Creacion de la variable de estado
$apc_state = array ('state' => "$os$oe$or$oa$ot$op$ox", // esta
variable almacena el valor antes de dar el click y
                                                       // aparece de
forma automatica en el enlace a texto completo
                   's' => $os,
                   'e' => $oe,
                   'r' => $or,
                   'a' => $oa,
                                       't' => $ot,
                   'p' => $op,
                   'x' => $ox,
                                       'estado' => urlencode("$os$oe$or$oa$ot$op$ox"), //para codificar
a formato url
                                        # Variables de ayuda usadas en el site module -Tu puedes definir
tantas variables como desees
                   'anterior' =>       $anterior,
                   'vid' => $vid,
                                       # Mensaje es para depurar... en el modulo de sitios se
                   # puede poner {mensaje} para mostrarlo...
                   'mensaje' => $mensaje,
                   'parse' => $parse, # informacion de "debug"
                   'Institucion' =>    'Mi institucion',
                   );

?>

Como capturar el tamaño y el tipo de un archivo

La solucion esta en construirse funciones personalizadas para ese campo. Te comparto dos que me funcionan perfectamente, filesize para el tamaño del archivo y filetype para el tipo de archivo


<?php

function usr_filesize ($columns, $col, $param)
 {

define('PATH', "/home/colnodo/public_html"); //ruta completa

$archivo =PATH.$columns[$col][0][value];

if ($archivo{strlen($archivo)-4}==".") { // compruebo si tiene una
extension tipo windows

$tamano = filesize($archivo);

               if ($tamano <= 1048576) {
               $tamano_kb = round($tamano /1024,1);
               return $tamano_kb." Kb";
               }
               else // si pasa 1024 se muestra en MB
               {
               $tamano_mb = round($tamano /1048576,1);
               return $tamano_mb." Mb";
               }
                                               }
else                                    {
               return "";
                                               }

}


function usr_filetype ($columns, $col, $param)
 {

$archivo =$columns[$col][0][value];

if ($archivo{strlen($archivo)-4}==".") {

$extension =substr($archivo, -3); //extraigo los tres ultimos caracteres

return $extension;
}

else {

return "no hay archivo";
}
}

?>
-----------------------

Estas funciones deben ponerse dentro del archivo usr_aliasfnc.php3 (sino esta hay que crearlo dentro de la carpeta INCLUDE de las AA) Se las puede usar desde la ventana de configuracion del campo o tambien en forma de comandos desde la configuracion de una vista asi:

------------------------------
<ul>

<li>
<a href='_#PUBLICA1'>
Documento Parte 1</a>
{alias:file...........1:f_u:usr_filesize} |
{alias:file...........1:f_u:usr_filetype}</li>

<li>
<a href='_#PUBLICA2'>
Documento Parte 2</a>
{alias:file...........2:f_u:usr_filesize} |
{alias:file...........2:f_u:usr_filetype}</li>

<li>
<a href='_#PUBLICA3'>
Documento Parte 3</a>
{alias:file...........3:f_u:usr_filesize} |
{alias:file...........3:f_u:usr_filetype}</li>

<li>
<a href='_#PUBLICA4'>
Documento Parte 4</a>
{alias:file...........4:f_u:usr_filesize} |
{alias:file...........4:f_u:usr_filetype}</li>

</ul>

---------------------------

Saludos

Adam


Nueva funcion para tipo y tamaño de archivos

He mejorado la nueva funcion INFORMACION DE ARCHIVO y la he programado para que se pueda usar comodamente desde la configuracion del campo en el sistema de administracion de contenidos de las AA y sin tener que rutear nada.

Solo añade lo siguiente (siempre has un backup de los archivos primero)

1. Al archivo item.php3 ubicado -por ejemplo- en /srv/www/htdocs /apc-aa/include/item.php3


 // muestra datos del archivo subido
  function f_z($col, $param="") {

switch ( $param ) {
case 'type':
{
$string = $this->getval($col);
$string2array = explode(".",$string);
$extension = $string2array [count($string2array)-1];
return $extension;
}
case 'size':
{
$string = $this->getval($col);
$string2array = explode("/",$string);
$path_file=IMG_UPLOAD_PATH.$string2array[count($string2array)-2]."/".$string2array[count($string2array)-1];
if (!is_dir($path_file)){
$size = filesize($path_file);
$size_kb=round($size /1024,1);
$size_mb=round($size /1048576,1);
if ($size <= 1048576){$size=$size_kb." Kb";} else
{$size=$size_mb." Mb";}
return $size;
                                                                                                       }
}
}
}



2. Al archivo constants_param_wizard.php3 ubicado -por ejemplo- en /srv/www/htdocs /apc-aa/include/constants_param_wizard.php3 dentro del array $FIELD_FUNCTIONS



"f_z"=>array("name"=>_m("file information"),
   "desc"=>_m("prints <i>the field</i> as file information, its size or type"),
   "params"=>array(
       array("name"=>_m("information"),
       "desc"=>_m("specifies returned information: <br> - <i>size</i>
- returns size of file in Kb o Mb<br> - <i>type</i> - returns type of
file)"),
       "type"=>"STR",
       "example"=>"size"))),


Eso es todo.Te estoy enviando los archivos por si quieres reemplazarlos directamente en las rutas especificas sin tener que meterte al codigo fuente. Lo hecho en la version 2.10.0 de las AA .

Un ejemplo de configuracion del campo seria usando la funcion f_z (que he creado) con los parametros size y type de esta forma


Alias 1  _#PUBLICA1
Función f_h - múltiples - HTML
Parámetros
Descripción

Alias 2 _#SIZEPUB1
Función f_z - file information
Parámetros size
Descripción

Alias 3 _#TYPEPUB1
Función f_z - file information
Parámetros type
Descripción

Tambien puedes usarlos por comandos directamente asi en la vista que desees

Tamaño: {alias:file...........1:f_z:size} Tipo: {alias:file...........1:f_z:type}

Saludos

Adam

Lista de javascripts para combinar con AA

1. Muestra en un popup la descripcion del url [1]