Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fonction amélioration ou nouvelle #356

Closed
fran6t opened this issue Mar 9, 2014 · 19 comments
Closed

Fonction amélioration ou nouvelle #356

fran6t opened this issue Mar 9, 2014 · 19 comments

Comments

@fran6t
Copy link

fran6t commented Mar 9, 2014

Comme conseillé voici une issue qui n'en est pas une (cf conseil de @cobalt74). En fait pour un theme façon Google Flux ou Google Current j'ai maintenant besoins de quelques fonctions.
Je fais donc appel à votre expérience plutôt que de réinventer la roue. Voici sans préparation quelques fonctions que je souhaite...
Fonction TruncateChapeau
J'ai vu qu'il y a déjà en natif une fonction truncate, mais voilà il me la faudrait plus performante dans le sens ou il me faudrait une truncate qui avant aurait virer les balises car faire un truncate qui tombe au milieu d'une img src image c'est pas top en plus ce truncate faudrait idéalement qu'il coupe après un mot
Function FindImageRepresent
Trouve les images dans le flux et me fait remonter la plus grosse en taille ainsi que ses dimensions (afin de permettre de virer les pictos style FB Tweeter) l'idée serait donc de trouver la plus grosse elle devrait être ainsi representative le plus souvent du sujet du billet.
Ce sont les deux principales qui me viennent, la premiere il faut que je refouille dans mes vieux dev j'ai peut-être ça quelques part mais si quelqu'un l'a sous la main car l'utilisant beaucoup ou dans un dev recent je suis preneur.
Sinon le thème avance bien, beaucoup de boulot encore il sera responsive et concernera que la consultation de dossier et flux pas de gestion, l'idée étant de la consultation façon magazine (feuilletage ballade) uniquement.

@Sbgodin
Copy link
Member

Sbgodin commented Mar 9, 2014

Concernant le truncate, j'y avais pensé et renoncé tellement ça me paraissait compliqué. Si le code est régulier, ça passe. Mais lorsqu'il y a des spécificités ça pourrait devenir cauchemardesque.

Concernant le parcours des images, il faut (je suppose) chercher soit selon la déclaration de taille, soit selon la taille effective de l'image. Mais il faut charger les images plutôt que de simplement réutiliser le lien. C'est du boulot !

Dans ces deux cas, selon motivation, n'hésite pas : implémente-les dans ta divergence de Leed et quand/si c'est prêt on les intégrera si ça peut servir à tout le monde.

@cobalt74
Copy link
Collaborator

cobalt74 commented Mar 9, 2014

moi j'ai rien sur ça. bon dev ;)
les fonctions peuvent être intégrés au fichier fonction.php de Leed si générique et utiles.

@fran6t
Copy link
Author

fran6t commented Mar 9, 2014

@sgbodin j'ai un petit creusé pour les images voici un debut que je vais ameliorer déjà en essayant d'y mettre l'idée de ne pas télécharger complètement l'image pour avoir sa taille dans le manuel de la commande getimgsize sur phpnet quelqu'un donne une solution faudra que je trouve l'equiv pour du png aussi.
Pour revenir au flux j'ai fais des tests rapides avec ce qui est mis en bdd de Leed et avec le dom c'est facile, maintenant cela risque de ne pas passer sur tous les hebergements

public static function stripIMG($text){
        $doc = new DOMDocument();
        $doc->loadHTML($text);
        $list = $doc->getElementsByTagName('img');
        foreach ($list as $node) {
            if ($node->hasAttribute('src')) {
                $src = $node->getAttribute('src');
                $filename = basename($src);
                echo "<br />src " . $src;
                echo "<br />liste des images " . $filename;
                $blah = getimagesize($src);
                echo "<br />type= " . $type = $blah['mime'];
                echo "<br />X= " . $blah[0];
                echo "<br />Y= " . $blah[1];
                //$node->setAttribute('src', 'http://static.images.monsite.com/images/' . $filename);
            }
        }
    }

@Sbgodin
Copy link
Member

Sbgodin commented Mar 9, 2014

En effet, il faudra veiller à tester la disponibilité de getimagesize. Ça pourra être fait à l'installation, avec un avertissement et une désactivation en règle des fonctions en dépendant.

@fran6t
Copy link
Author

fran6t commented Mar 10, 2014

J'ai mis un tout premier jet chez moi https://github.com/fran6t/Mag attention pour faire fonctionner il faut impérativement sauver le fichier Functions.class.php qui est à la racine de Leed et ensuite mettre en place celui que j'ai mis dans le repertoire Mag. Ensuite il suffira de selectionner le thème soyez indulgent c'est vraiment l'ébauche au départ je voulais faire plutot une maquette statique puis comme je me rendais compte que cela me prenait du temps j'ai fais directement ce jet. Consultez des flux qui ont des images de preferences, il y a des erreurs dans la function truncate et certainement des flux qui peuvent peut-être faire planter pour l'instant je n'en ai pas trouvé attention aussi il y a pas de cache donc les flux avec de nombreuses images peuvent mettre un peu de temps. Les retours sont les bienvenus.

@cobalt74
Copy link
Collaborator

c'est embêtant cette histoire de Functions.class.php. y'a pas moyen de le mettre dans le thème finalement ? ça simplifierai les tests et l'installation :p

@fran6t
Copy link
Author

fran6t commented Mar 11, 2014

Sauf erreur de ma part, nous ne pouvons mettre de php dans les thèmes l'option est off, y aurait peut-être la solution de faire un plugin temporaire qui devrait fonctionner c'est un peu lourd, mais pourquoi pas.
Peut-être faire une légère modif du parametrage de Leed pour autoriser l'emploi PHP dans les thèmes un truc qui modifierai la variable raintpl::configure( 'php_enabled', true );
Cela pourrait être aussi une issue:
1/ En parametre dans Leed autoriser ou pas le php dans un thème False par defaut
2/ Si condition 1 ok que le coeur de Leed lors du l'utilisation d'un theme autorise l'include d'un fichier php par exemple _define.php

A noter que ce fichier _define.php pourrait servir à faire connaitre la version du thème et accessoirement y inclure des fonctions php specifique au thème.

@cobalt74
Copy link
Collaborator

et oui ! la solution du plugin est viable. Bien prévoir un affichage de Leed avec le plugin non activé. Avec un message dans le thème indiquant qu'il faut activer tel ou tel plugin pour son fonctionnement correct.

@Sbgodin
Copy link
Member

Sbgodin commented Mar 11, 2014

Je ne connais pas trop la partie gérant les thèmes. Un thème peut-il s'autoriser tout seul comme un grand à utiliser le Php ?

@cobalt74
Copy link
Collaborator

non, la solution serait (pour éviter un plugin) d'inclure un fichier php générique de thème permettant les ajouts de fonctionnalités spécifiques.
/template/montheme/functions.theme.php

@fran6t
Copy link
Author

fran6t commented Mar 13, 2014

Si vous voulez jeter un oeil sans trop polluer votre Leed, j'ai mis en plugin les fonctions. Soyez indulgent je n'ai pas pu beaucoup travailler dessus, mais cela permettra de voir un peu ce que cela donne. N'abusez pas pour l'instant trop de la vue des blogs et autre flux qui possédent des images car comme ce n'est pas optimisé (pas de cache) cela veut dire que lorque vous visualisez le flux de quelqu'un le serveur recup la taille de la premiere image de chaque billet puis c'est au tour de votre navigateur de l'afficher cela fait donc pour chaque quelques touches et sollicitation.
Attention Leed sinon fonctionne comme avant il y a juste un lien en plus mais que souvent l'on voit pas il faut remonter un peu l'ecran car il y a un possitionnement qui se fait en automatique sur le premier truc non lu.

@Sbgodin
Copy link
Member

Sbgodin commented Mar 14, 2014

@fran6t c'est où ?

@fran6t
Copy link
Author

fran6t commented Mar 14, 2014

Oups désolé dans mon github le theme ici https://github.com/fran6t/Mag et le plugin là https://github.com/fran6t/MagFonctions

@fran6t
Copy link
Author

fran6t commented Mar 29, 2014

Du nouveau depuis mon dernier post, maintenant le plugin et le theme savent aller chercher des images dans les flux qui n'en contiennent pas (c'est un peu border line niveau éthique puisque si l'auteur d'un flux a volontairement appauvrit son flux c'est qu'il a de bonnes raisons). J'ai en plus franchi un pas supplémentaire, car en renseignant une table de paramétrage (pour l'instant à la main via phpmyadmin) cela permet d'aller chercher la premiere image representative dans une div de pages source.

@fran6t
Copy link
Author

fran6t commented Apr 1, 2014

Besoins d'un bon coup de main, je cale un peu avec les appels jQuery, je suis en train d'incorporer dans mon thème la gestion tactile en gros swipe qui permet de passer d'un flux a un autre via un mouvement soit de souris ou de doigt vers la droite ou vers la gauche. Cela fonctionne bien, mais maintenant il me faut arriver a re-incorporer l'appel ajax qui permet de marquer un articles lu lorsque l'on clique dessus.

Pour memoire l'interception se fait sur un onclick avec le code actuel qui est :

function readThis(element,id,from,callback){
    $.ajax({
            url: "./action.php?action=readContent",
            data:{id:id},
            success:function(msg){
                if(msg.status == 'noconnect') {
                    alert("Vous devez être connecté");
                }
            }
        });
}

Mon code qui permet de detecter le clique ou les mouvements de doigts est :

$(function() {  
    var dejaswipe = false;
    //Enable swiping...
    {loop="$events"}
        $("#{$value->getId()}").swipe( {
            tap:function(event, target) {
                var lid = $("#{$value->getId()}").attr("id");
                alert(lid);
                window.location = "index.php?action=selectedFeed&feed={$_['feed']}&billet={$value->getId()}&view=article";  
            },
            swipeLeft:function(event, direction) {
                dejaswipe = true;
                window.location = tablurl['droite'];
            },
            swipeRight:function(event, direction) {
                dejaswipe = true;
                window.location = tablurl['gauche'];    
            },
            threshold:50
        });
    {/loop}
});

Lors de l'evenement tap ou clique c'est pareil il faudrait que j'arrive donc à faire l'appel ajax pour marquer l'article comme lu et que j'ouvre l'article.

@cobalt74
Copy link
Collaborator

cobalt74 commented Apr 1, 2014

pour les évènements, regarde la partie touche de raccourcis, tu devrais trouver tous les évènements nécessaires.

@fran6t
Copy link
Author

fran6t commented Apr 1, 2014

Merci, en regardant ce que tu m'as dit je pense voir la solution.
J'essaierai demain, car là je suis un peu naze et je trouve galère le debuggage de javascript car je n'y suis pas habitué je perd souvent un temps fou.
A priori il me suffit simplement d'appeler la fonction readThis juste avant le windows.location dans la partie tap: à moi de juste peupler correctement l'appel de cette fonction dans ma boucle.

@fran6t
Copy link
Author

fran6t commented Apr 2, 2014

Merci, j'ai juste mis l'appel de la fonction comme ci-dessous, après ce n'est pas forcément très propre car je pense que seul le parametre id est suffisant, mais pour l'instant je laisse comme cela pour rester proche de l'original.

$("#{$value->getId()}").swipe( {
                        tap:function(event, target) {
                            //Appel de la fonction ajax pour marquage lu
                            readThis(this,{$value->getId()},'title')
                            // Maintenant nous partons sur l'acticle
                            window.location = "index.php?action=selectedFeed....

@Sbgodin Sbgodin closed this as completed Jan 12, 2017
@Sbgodin
Copy link
Member

Sbgodin commented Jan 12, 2017

Rouvrir si quelqu'un veut poursuivre le développement.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants